日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言算法竞赛入门经典百度云,《算法竞赛入门经典》CH-2(C语言)

發布時間:2024/10/8 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言算法竞赛入门经典百度云,《算法竞赛入门经典》CH-2(C语言) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

中國剩余定理,題目要求:

每組數據包含3個非負整數a,b,c,表示隊尾人數(a<3, b<5, c<7),輸出總人數的最小值(或報告無解)。已知總人數不小于10,不超過100。輸入到文件結束為止。

我的這個解法是考慮到測試輸入的a,b,c都滿足條件,未對其進行合法判定。其實還應該加入對a, b , c對于3,5,7的大小判定才更加嚴密。

//韓信點兵問題,又稱中國剩余定理

//5和7的公倍數除以3余1的最小數是70

//3和7的公倍數除以5余1的最小數是21

//3和5的公倍數除以7余1的最小數是15

//總數除以3、5、7的余數分別設為a,b,c

//則sum = a*70 + b*21 + c*15

//再按范圍減去105(3, 5, 7的最小公倍數)

#include

int main()

{

int a, b, c;

int kase = 0;

while(scanf("%d%d%d", &a, &b, &c)==3)

{

int sum = 0;

sum = a*70 + b*21 + c*15;

while(sum > 100)

{

sum -= 105;

}

if(sum < 10)

{

printf("Case%d: No answer\n", kase);

}

else

{

printf("Case%d: %d\n", kase,sum);

}

kase++;

}

return 0;

}

子序列的和,題目要求:

輸入兩個正整數 n

樣例輸入:

2 4

65536 655360

0 0

樣例輸出:

Case1: 0.42361

Case2: 0.00001

//主要在于m<10^6,算法競賽中的int類型范圍大約是+-2*10^10,

//所以i^2可能會超過int類型表示的范圍,要用更大的類型來存儲

#include

int main()

{

long n,m;

int kase = 1;

while(scanf("%ld%ld", &n, &m)==2 && n && m)

{

double sum = 0;

for(long i = n; i <= m; i++)

{

sum += (double)1/(i*i);

}

printf("Case%d: %.5f\n", kase, sum);

kase++;

}

return 0;

}

分數化小數

輸入正整數a,b,c,輸出a/b的小數形式,精確到小數點后c位。a,b<=10^6,c<=100。輸入包含多組數據,結束標記為 a = b = c = 0。

樣例輸入:

1 6 4

0 0 0

樣例輸出:

Case1: 0.1667

//關鍵在于小數部分的除法究竟是怎樣除的

//已經太習慣去除但是忘記了究竟是怎樣的原理

//就是把小數當做整數一樣除,不過得到的商放在小數點之后

void decimal(int a, int b, int c)

{

printf("%d.", a/b);

int rem = a%b;

for(int i = 1; i <= c; i++)

{

rem *= 10;

printf("%d", rem/b);

rem = rem%b;

}

}

題目:

用1,2,3,...,9組成3個三位數abc,def和ghi,每個數字恰好使用一次,要求abc:def:ghi = 1:2:3。按照“abc def ghi”的格式輸出所有解,每行一個解。提示:不必太動腦筋(既然題目說了不必太懂腦筋我就用了非常暴力的方法,見method2)

暴力法求解的完整代碼

//由1~9的和為45,9!= 362880判定是否互異

//其實在不知道結果的前提下不夠嚴謹

//要學會熟練運用指針

//method 1

#include

void result(int num, int *result_add, int *result_multi)

{

int a = num/100;

int b = num/10%10;

int c = num%10;

*result_add += (a+b+c);

*result_multi *= (a*b*c);

}

int main()

{

int result_add , result_multi;

for(int abc = 100; abc < 333; abc++)

{

int def = 2*abc;

int ghi = 3*abc;

result_add = 0;

result_multi = 1;

result(abc, &result_add, &result_multi);

result(def, &result_add, &result_multi);

result(ghi, &result_add, &result_multi);

//判斷是否互異

if(result_add == 45 && result_multi == 362880)

{

printf("%d %d %d\n", abc, def, ghi);

}

}

return 0;

}

//method 2 片段

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

{

if(i == a){continue;}

if(i == b){continue;}

if(i == c){continue;}

if(i == d){continue;}

if(i == e){continue;}

if(i == f){continue;}

if(i == g){continue;}

if(i == h){continue;}

int abc = 100*a + 10*b + c;

int def = 100*d + 10*e + f;

int ghi = 100*g + 10*h + i;

if(def == 2*abc && ghi == 3*abc)

{

printf("%d %d %d\n", abc, def, ghi);

}

int main()

{

permutation();

return 0;

}

實驗

實驗代碼

Xcode給出的警告

輸出結果

總結

以上是生活随笔為你收集整理的c语言算法竞赛入门经典百度云,《算法竞赛入门经典》CH-2(C语言)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。