經典程式設計題目 運金 的幾種最優解的做法(C語言)

2021-10-07 11:41:28 字數 2151 閱讀 2334

題目內容:某船最高載重量為

300噸,現有重量為

101,78,92,45,301,117,85,210

的八塊金子,在不超過最高載重的情況下,從中選擇任意塊金子使船運金重量達到最高。

做法一:二進位制轉化法

做法分析:現有

8塊金子,每塊金子有兩種情況:選用或者不選用,選用可以用

1代表,不選用可以用

0代表。這樣的話從八塊金字選用情況有:

00000001

到11111111

共254

種情況。最接近船載重的情況便是最優解。

#include #include int boat_max = 300;//船的最高載重量為300噸

int weight[10] = ;//存放每塊金子重量的陣列

int b[10];//各金子有無情況的陣列

/*bin函式,用於將十進位制數字轉化成二進位制,存入陣列中*/

/*此段**隨著n的值從1到255,轉化成二進位制就是從00000001到11111111*/

void bin(int n)

for(;i < 8; i++) //當十進位制數不夠八位時,將剩下的高位補0

}int main()

max = 0; //最大值

flag = 0; //標記函式

for(i = 1; i <= n; i++)

}//迴圈結束後max就是此題目的最優解,每塊金子的選用情況可以由flag轉化成二進位制後得到。

printf("此船此次運金的最大重量為:%d噸\n", max);

printf("選用金子為:\n");

bin(flag);

for(i = 0; i < 8; i++)

}return 0;

}

做法二:動態規劃法

分析:利用陣列和動態規劃,來找到最優解。

#include #include #include file *fp, *fp1;

char fp_line[1024];

char name[50][30];

char name_temp[30];

int relation[40][40];

int hang = -1;

int cmp(char *a, char *b)

}return 1;

}int main()

if((c1 >= '0' && c1 <= '9')||c1 == ' ' || c1 == '.' || c1 == '\n' || c1 == '\t')

else //上面的判斷條件都不滿足,剩下的就是漢字

}name_number++; //字串陣列的下標加一,再存下一行的名字

}printf("各學生序號如下:\n");

for(i = 0; i < name_number; i++)

fclose(fp);

fp1 = fopen("relation.txt","rb");

while (!feof(fp1))

if(c1 == ' ' || c1 == ',' || fp_line[i+1] == '\0') //這些都是名字結束後緊接著的字元,從這裡把之前存下來的名字取出

}for(j = 0; j < 20; j++) //把name_temp賦成空,存下乙個名字用

j = 0;

continue;

}if((c1 >= '0' && c1 <= '9') || c1 == '.' || c1 == '\n')

if(flag)}}

printf("\n\n轉化後的關係矩陣為:\n");

for(i = 0; i < name_number; i++)

printf("\n");

}max = 0;

c1 = 0;

flag = 0;

for(i = 0; i < name_number; i++) //遍歷矩陣

}if(c1 > max) //遍歷一遍後,選擇第flag列的人最多

if(c1 == 0) //c1為0說明本班沒有選擇他的人

}return 0;

}

C語言程式設計題目(實用經典)3

輸入三個整數x,y,z,把這三個數從小到大輸出 define crt secure no warnings include include 輸入三個整數x,y,z,請把這三個數由小到大輸出 int main if x z if y z printf 這三個整數從小到大排列為 d d d n x,y,...

C語言程式設計題目 實用經典 10

有5個人坐在一起,問第五個人多少歲?他說比第4個人大2歲。問第4個人歲數,他說比第3個人大2歲。問第三個人,又說比第2人大兩歲。問第2個人,說比第乙個人大兩歲。最後 問第乙個人,他說是10歲。請問第五個人多大?include include int calage int n return calag...

經典題目 聚會的快樂

題目 聚會的快樂 問題描述 你要組織乙個由你公司的人參加的聚會。你希望聚會非常愉快,盡可能地多找些有趣的熱鬧。但勸你不要同時邀請某個人和他的上司,因為這可能帶來爭吵。給定n個人 姓名,他的幽默係數,以及他上司的名字 程式設計找到能是幽默係數和最大的若干個人。輸入格式 party.in 第一行乙個整數...