C语言经典算法 1-10
生活随笔
收集整理的這篇文章主要介紹了
C语言经典算法 1-10
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 一、排列組合題
- 二、區間題
- 三、判斷平方數相關
- 四、給你一個年月日判斷是第幾天
- 五、將3個數由小到大排序
- 六、九九乘法表
- 七、兔子繁殖數列
- 八、判斷素數
- 九、水仙花數
- 十、因數分解
一、排列組合題
題目:有 1、2、3、4 個數字,能組成多少個互不相同且無重復數字的三位數?都是多少? 程序分析:可填在百位、十位、個位的數字都是 1、2、3、4。組成所有的排列后再去 掉不滿足條件的排列。 即:百位 和十位 和個位上的數字都不能相同代碼如下:
#include<stdio.h> int main(void) {int i,j,k;int count=0;printf("\n");for(i=1;i<5;i++)for(j=1;j<5;j++)for(k=1;k<5;k++){if(i!=k&&i!=j&&j!=k){printf("%d,%d,%d\n",i,j,k);count++;}}printf("總共%d有種\n",count);return 0; }二、區間題
題目: 企業發放的獎金根據利潤提成。利潤低于或等于 10 萬元時,獎金可提 10%; 利潤高 于 10 萬元,低于 20 萬元時,低于 10 萬元的部分按 10%提成, 高于 10萬元的部分,可可提 成 7.5%;20 萬到 40萬之間時,高于 20 萬元的部分, 可提成 5%;40萬到 60 萬之間時高于 40 萬元的部分,可提成 3%;60 萬到 100 萬之間時, 高于 60 萬元的部分,可提成 1.5%,高于 100 萬元時,超過 100 萬元的部分按 1%提成, 從鍵盤輸入當月利潤 I,求應發放獎金總數?程序分析:請利用數軸來分界,定位。注意定義時需把獎金定義成長整型。 本題主要是考察if和else的應用來選擇相應的區間。代碼如下:
#include<stdio.h> void main() { long int i; int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i);bonus1=100000*0.1;bonus2=bonus1+100000*0.75;bonus4=bonus2+200000*0.5; bonus6=bonus4+200000*0.3; bonus10=bonus6+400000*0.15; if(i<=100000) bonus=i*0.1; else if(i<=200000) bonus=bonus1+(i-100000)*0.075;else if(i<=400000)bonus=bonus2+(i-200000)*0.05;else if(i<=600000)bonus=bonus4+(i-400000)*0.03;else if(i<=1000000) bonus=bonus6+(i-600000)*0.015; else bonus=bonus10+(i-1000000)*0.01;printf("bonus=%d\n",bonus); }三、判斷平方數相關
題目:一個整數,它加上 100后是一個完全平方數,再加上 168 又是一個完全平方數,請問該數是多少?程序分析:在 10萬以內判斷,先將該數加上 100后再開方, 再將該數加上 268 后再開方,如果開方后的結果 滿足: 開方后的數和 原數+100 相等 再開方后的數和 原數+100+168 相等 則滿足條件代碼如下:
#include<stdio.h> #include<math.h> int main(void) {long unsigned int i;int sum1=0;int sum2=0;int x1=0;int x2=0;for(i=1;i<=100000;i++){sum1=i+100;sum2=sum1+168;x1=sqrt(sum1);x2=sqrt(sum2);if(x1*x1==sum1&&x2*x2==sum2)//如果一個數的平方根的平方等于該數,這說明此數是完全平方數*/ printf("%d\n",i);}return 0; }四、給你一個年月日判斷是第幾天
題目:輸入某年某月某日,判斷這一天是這一年的第幾天?程序分析:以 3 月 5 日為例,應該先把前兩個月的加起來, 然后再加上 5 天即本年的第幾天,特殊 情況,閏年且輸入月份大于 3 時需考慮多加一天。代碼如下:
#include<stdio.h> main() { int day,month,year,sum,leap;printf("\npleaseinput year,month,day\n"); scanf("%d,%d,%d",&year,&month,&day);switch(month)/*先計算某月以前月份的總天數*/ {case 1:sum=0;break; case 2:sum=31;break; case 3:sum=59;break;case 4:sum=90;break; case 5:sum=120;break; case 6:sum=151;break;case 7:sum=181;break; case 8:sum=212;break; case 9:sum=243;break; case 10:sum=273;break;case 11:sum=304;break; case 12:sum=334;break;default:printf("dataerror");break;} sum=sum+day; /*再加上某天的天數*/if(year%400==0||(year%4==0&&year%100!=0))/*判斷是不是閏年*/ leap=1; else leap=0; if(leap==1&&month>2)/*如果是閏年且月份大于 2,總天數應該加一天*/sum++; printf("It isthe %dthday.",sum); }五、將3個數由小到大排序
題目:輸入三個整數 x,y,z,請把這三個數由小到大輸出。程序分析:我們想辦法把最小的數放到 x 上,先將 x 與 y 進行比較,如果 x>y 則將 x 與 y 的值進行交換,也可以用冒泡排序等一些排序算法,不過本題的數據較少,用排序算法變量會多一些。代碼如下:
#include<stdio.h> int main(void) {int x,y,z;int t;scanf("%d %d %d",&x,&y,&z);if(x>y){t=x;x=y;y=t;}if(x>z){t=x;x=z;z=t;}if(y>z){t=y;y=z;z=t;}printf("%d %d %d\n",x,y,z);return 0; }六、九九乘法表
題目:輸出 9*9口訣。 程序分析:分行與列考慮,共 9 行 9 列,i 控制行,j 控制列。代碼如下:
#include<stdio.h> int main(void) {int i,j;int sum=0;for(i=1;i<=9;i++)//控制行{for(j=1;j<=i;j++)//控制列{sum=i*j;printf("%d*%d=%d\t",j,i,sum);}printf("\n");}return 0; }七、兔子繁殖數列
題目:古典問題:有一對兔子,從出生后第 3 個月起每個月都生一對兔子,小兔子長到第三個月 后每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少對?程序分析: 兔子的規律為數列 1,1,2,3,5,8,13,21.... 這其實就是一個斐波那契數列 斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契以兔子繁殖為例子而引入, 故又稱為“兔子數列”,指的是這樣一個數列:1、1、2、3、5、8、13、21、34、……代碼如下:
#include<stdio.h> void main(){ long f1,f2; int i; f1=f2=1;for(i=1;i<=20;i++) {printf("%12ld%12ld",f1,f2);if(i%2==0)printf("\n");/*控制輸出,每行四個*/ f1=f1+f2;/*前兩個月加起來賦值給第三個月*/ f2=f1+f2;/*前兩個月加起來賦值給第三個月*/ } }八、判斷素數
題目:判斷 101-200 之間有多少個素數,并輸出所有素數。程序分析:判斷素數的方法:用一個數分別去除 2 到 sqrt(這個數), 如果能被整除, 則表明此數不是素數,反之是素數。代碼如下:
#include<stdio.h> #include<math.h> int main(void) {int i;int j;int temp=0;//用來判斷是不是素數for(i=101;i<=200;i++){temp=0;for(j=2;j<=sqrt(i);j++){if(i%j==0){temp=1;break;}}if(temp==0)//說明是素數{printf("%d ",i);}}return 0; }九、水仙花數
題目:打印出所有的“水仙花數”,所謂“水仙花數”是指一個三位數,其各位數字立方和等于該數 本身。 例如:153是一個“水仙花數”,因為 153=1 的三次方+5 的三次方+3 的三次方。程序分析:利用 for 循環控制 100-999 個數,每個數分解出個位,十位,百位。代碼如下:
#include<stdio.h> int main(void) {int i=0;int g,s,b;int sum=0;for(i=100;i<=999;i++){g=i%10;s=(i%100)/10;b=i/100;sum=g*g*g+s*s*s+b*b*b;if(sum==i){printf("%d ",i);}}return 0; }十、因數分解
題目:將一個正整數分解質因數。例如:輸入 90,打印出 90=2*3*3*5。程序分析:對 n 進行分解質因數,應先找到一個最小的質數 k,然后按下述步驟完成: (1)如果這個質數恰等于 n,則說明分解質因數的過程已經結束,打印出即可。 (2)如果 n不等于k,但 n 能被 k 整除,則應打印出 k 的值,并用 n 除以 k 的商, 作為新的正整數你 n, 重復執行第一步。 (3)如果 n 不能被 k 整除,則用 k+1 作為 k 的值,重復執行第一步。代碼如下:
#include<stdio.h> void main() { int n,i; printf("\npleaseinput anumber:\n");scanf("%d",&n);printf("%d=",n);for(i=2;i<=n;i++){ while(n!=i){ if(n%i==0) {printf("%d*",i); n=n/i;} else break; } } printf("%d\n",n); }C語言經典算法 11-20 點擊跳轉
C語言經典算法 21-30 點擊跳轉
總結
以上是生活随笔為你收集整理的C语言经典算法 1-10的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算首部检验和
- 下一篇: C语言经典算法 11-20