「算法競(jìng)賽入門經(jīng)典 第二版」第 1、2章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì) 習(xí)題解答

1-1 平均數(shù):輸入3個(gè)整數(shù)浓利,輸出他們的平均值挤庇,保留3位小數(shù)

#include <stdio.h>
int main(){ 
  int a,b,c; 
  scanf("%d%d%d",&a,&b,&c); 
  double d = (double)(a+b+c); 
  printf("%.3lf\n",d/3.0); 
  return 0;
}

1-2 溫度:輸入華氏溫度 f ,輸出對(duì)應(yīng)的攝氏度 c贷掖,保留3位小數(shù)嫡秕。
提示:c=5(f-32)/9

#include <stdio.h>
int main(){ 
  double f; 
  double c; 
  scanf("%lf",&f); 
  c = 5*(f-32)/9.0; 
  printf("%.3lf\n",c); 
  return 0;
}

1-3 連續(xù)和:輸入正整數(shù) n,輸出1+2+3+...+n的值苹威。
提示:目標(biāo)是解決問題昆咽,而不是練習(xí)編程

#include <stdio.h>
int main(){ 
  int n; 
  scanf("%d",&n); 
  printf("%d\n",(n*(1+n))/2); 
  return 0;
}

1-4 正弦和余弦:輸入正整數(shù) n(n<360),輸出n度的正弦余弦數(shù)值。
提示:用數(shù)學(xué)函數(shù)

#include <stdio.h>
#include <math.h>
#define PI acos(-1.0)
int main(){ 
  int n; 
  scanf("%d",&n); 
  printf("%lf\n",sin((PI*n)/180)); 
  printf("%lf\n",cos((PI*n)/180)); 
  return 0;
}

1-5 打折:一件衣服 95元牙甫,若消費(fèi)滿300元掷酗,可打八五折。輸入購買衣服件數(shù)窟哺,輸出需要支付的金額(單位元)泻轰,保留兩位小數(shù)

#include <stdio.h>
int main(){ 
  int n; 
  double a; 
  scanf("%d",&n); 
  a=n*95.0; 
  if(a<300) printf("%.2lf\n",a); 
  else printf("%.2lf\n",a*0.85); 
  return 0;
}

1-6 三角形:輸入三角形 3 條邊長度值(均為正整數(shù)),判斷是否能為直角三角形的3個(gè)邊長且轨。如果可以糕殉,則輸出yes亩鬼,不能輸出no,如果無法構(gòu)成三角形阿蝶,則輸出 not a triangle

#include <stdio.h>
int main(){ 
  int a,b,c,max; 
  scanf("%d%d%d",&a,&b,&c); 
  max = a>b?a:b; 
  max = max>c?max:c; 
  if (max > a+b+c-max) { 
    printf("not a triangle\n"); 
    return 0; 
  } 
  if (a*a == b*b+c*c || b*b == a*a+c*c || c*c == a*a+b*b )
    printf("yes\n");
  else 
    printf("no\n"); 
  return 0;
} 

1-7 年份:輸入年份雳锋,判斷是否為潤年,如果是羡洁,輸出yes玷过,否,輸出no筑煮。提示:簡單的除以4是不夠的

#include <stdio.h>
  int main(){ 
  int n; 
  scanf("%d",&n); 
  if(n%4==0 && n%100!=0 || n%400==0) 
    printf("yes\n"); 
  else 
    printf("no\n"); 
  return 0;
}

2-1 水仙花數(shù):輸出100~999中的所有水仙花數(shù)辛蚊,若3位數(shù)ABC滿足ABC=A3+B3+C^3「C 的 3 次方」
則稱其為水仙花數(shù),例如
153 = 13+53+3^3真仲,所以153是水仙花數(shù)

#include <stdio.h>
int main(){ 
  int a,b,c; 
  for(int i=100;i<=999;i++) { 
    a=i/100; 
    b=i/10%10; 
    c=i%10; 
    if(i==a*a*a+b*b*b+c*c*c) 
       printf("%d\n",i); 
   } 
  return 0;
}

2-2 韓信點(diǎn)兵:相傳韓信才智過人袋马,從不直接點(diǎn)清自己軍隊(duì)的人數(shù),只要讓士兵先后三人一排秸应、五人一排虑凛、七人一排的變換隊(duì)形,而他每次只掠過一眼隊(duì)伍尾排的人數(shù)就知道總?cè)藬?shù)了软啼。輸入包括多組數(shù)據(jù)桑谍,每組數(shù)據(jù)包含3個(gè)非負(fù)整數(shù)a,b,c(a<3,b<5,c<7)輸出總?cè)藬?shù)的最小值(或報(bào)告無解),已知總?cè)藬?shù)不小于10祸挪,不超過100
  樣例輸入:
  2 1 6
  2 1 3
  樣例輸出:
  Case 1: 41
  Case 2: No answer

#include <stdio.h>
int main(){ 
  int i,a,b,c,count=0; 
  while(scanf("%d%d%d",&a,&b,&c)==3 && a>0 && b>0 && c>0 && a<3 && b<5 && c<7) { 
    for(i=10;i<=100;i++) { 
      if(i%3==a && i%5==b && i%7==c) { 
        printf("Case %d: %d\n",++count,i); 
        break; 
      } 
    } 
    if(i==101) printf("Case %d: No answer\n",++count); 
  } 
  return 0;
}

2-3 倒三角形:輸入正整數(shù)n<=20,輸出一個(gè)n層倒三角形

#include <stdio.h>
int main(){ 
  int i,j,k,n; 
  scanf("%d",&n); 
  for(i=n;i>0;i--) { 
    for(k=0;k<n-i;k++) printf(" "); 
    for(j=0;j<2*i-1;j++) printf("#"); 
    printf("\n"); 
  } 
  return 0;
}

2-4 子序列的和:輸入兩個(gè)正整數(shù)n<m<106
,輸出1/n2
+1/(n+1)2
+...+1/m2
锣披,保留5位小數(shù)。輸入包含多組數(shù)據(jù)贿条,結(jié)束標(biāo)記為 n=m=0
  提示:本題有陷阱
  樣例輸入:
  2 4
  65536 655360
  0 0
  樣例輸出:
  Case 1: 0.42361
  Case 2: 0.00001

#include <stdio.h>
#include <math.h>
#include <time.h>

// 此程序建議用 管道錄入數(shù)據(jù)來測(cè)試
// 因?yàn)殒I盤輸入的時(shí)間也會(huì)被計(jì)算在程序運(yùn)行的時(shí)間之內(nèi)
int main(){ 
  int n,m,count=0; 
  double sum=0; 
  while (scanf("%d%d",&n,&m)==2 && m && n<m && m<pow(10.0,6.0)) { 
    if(m>46340) m=46340; 
    for (int j=n; j<=m; j++) { 
      sum += 1.0/(j*j); 
    // if(j%10==0)    
    // printf("Time used=%.5f n=%d 1/n=%.5lf sum=%.5lf\n", (double)clock()/CLOCKS_PER_SEC, j, 1.0/(j*j), sum); 
    }
    printf("Case %d: %.5lf",++count,sum); 
  } 
return 0;
}

2-5 分?jǐn)?shù)化小數(shù):輸入正整數(shù)a,b,c輸出a/b的小數(shù)形式雹仿,精確到小數(shù)點(diǎn)后c位。a,b<=106
,c<=100.輸入包含多組數(shù)據(jù)整以,結(jié)束標(biāo)記為 a=b=c=0
  樣例輸入:
  1 6 4
  0 0 0
  樣例輸出:
  Case 1: 0.1667

#include <stdio.h>
#include <math.h>
int main(){ 
  int a,b,c,i=0; 
  while (scanf("%d%d%d",&a,&b,&c)==3 && a && b && b<=pow(10.0,6.0) && c && c<=100) {    
    //printf("%*.*s\n",m,n,ch);
    
    //前邊的*定義的是總的寬度胧辽,后邊的定義的是輸出的個(gè)數(shù) 分別對(duì)應(yīng)外面的參數(shù)m和n 
    printf("Case %d: %.*lf\n",++i,c,(double)a/b);
  } 
  return 0;
}

2-6 排列:用1,2,3,...,9組成3個(gè)三位數(shù) abc,def,ghi 每個(gè)數(shù)字恰好使用一次,要求abc:def:ghi=1:2:3.按照"abc def ghi"格式輸出所有解悄蕾,每一行一個(gè)解。提示:不必太動(dòng)腦筋

#include <stdio.h>
void count(int num,int *addAll,int *mulAll){ 
  int i = num/100; //百位數(shù) 
  int j = num/10%10; //十位數(shù) 
  int k = num%10; //個(gè)位數(shù) 
  (*addAll) += i+j+k; 
  (*mulAll) *= i*j*k; 
  return;
}
int main(){ 
//至少3位數(shù)础浮,百位數(shù)最少是1帆调,數(shù)字不得重復(fù)得最少為123 
//同理 最大為987根據(jù)比例得 i最大為987/3 
  for(int i = 123; i <=987/3; i++) { 
    int addAll=0; 
    int mulAll=1; 
    count( i, &addAll, &mulAll); 
    count(i*2, &addAll, &mulAll); 
    count(i*3, &addAll, &mulAll); 
    //1-9的和只能是 9*10/2 
    //1-9的積只能是 2*3*4*5*6*7*8*9 
    if(addAll == 9*10/2 && mulAll == 2*3*4*5*6*7*8*9) 
      printf("%d %d %d\n", i, i*2, i*3); 
  } 
  return 0;
}

注意:
  1. 海量數(shù)據(jù)的輸入輸出可以通過文件得到緩解
  2. 程序的運(yùn)行時(shí)間并不是無法估計(jì)的 見本文 2-4

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市豆同,隨后出現(xiàn)的幾起案子番刊,更是在濱河造成了極大的恐慌,老刑警劉巖影锈,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芹务,死亡現(xiàn)場(chǎng)離奇詭異蝉绷,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)枣抱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門熔吗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人佳晶,你說我怎么就攤上這事桅狠。” “怎么了轿秧?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵中跌,是天一觀的道長。 經(jīng)常有香客問我菇篡,道長漩符,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任驱还,我火速辦了婚禮嗜暴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘铝侵。我一直安慰自己灼伤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布咪鲜。 她就那樣靜靜地躺著狐赡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪疟丙。 梳的紋絲不亂的頭發(fā)上颖侄,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音享郊,去河邊找鬼览祖。 笑死,一個(gè)胖子當(dāng)著我的面吹牛炊琉,可吹牛的內(nèi)容都是我干的展蒂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼苔咪,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼锰悼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起团赏,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤箕般,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體补箍,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年雌隅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了杯聚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片臼婆。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖械媒,靈堂內(nèi)的尸體忽然破棺而出目锭,到底是詐尸還是另有隱情,我是刑警寧澤纷捞,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布痢虹,位于F島的核電站,受9級(jí)特大地震影響主儡,放射性物質(zhì)發(fā)生泄漏奖唯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一糜值、第九天 我趴在偏房一處隱蔽的房頂上張望丰捷。 院中可真熱鬧,春花似錦寂汇、人聲如沸病往。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽停巷。三九已至,卻和暖如春榕栏,著一層夾襖步出監(jiān)牢的瞬間畔勤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國打工扒磁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留庆揪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓妨托,卻偏偏與公主長得像缸榛,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子兰伤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容