1 / 30

/* 分解出百位 * /

题目:打印出所有的 “ 水仙花数 ” ,所谓 “ 水仙花数 ” 是指一个三位数,其各位数字立方和等于该数本身。例如: 153 是一个 “ 水仙花数 ” ,因为 153=1 的三次方+ 5 的三次方+ 3 的三次方。 程序分析:利用 for 循环控制 100-999 个数,每个数分解出个位,十位,百位。.

amelie
Download Presentation

/* 分解出百位 * /

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。 • 程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。

  2. main() { int i,j,k,n; printf("'water flower'number is:"); for(n=100;n<1000;n++) { i=n/100; j=n/10%10; k=n%10; if(i*100+j*10+k==i*i*i+j*j*j+k*k*k) printf("%-5d",n); } printf("\n"); } /*分解出百位*/ /*分解出十位*/ /*分解出个位*/ 水仙花数的逻辑判断条件

  3. 最大数问题:从键盘上任意输入10个整数,求出其中的最大数。最大数问题:从键盘上任意输入10个整数,求出其中的最大数。 • 算法分析: • (1)设第一个数就是最大数max; • (2)若最大数max<下一个数next,则该数应为所输入的所有数中的最大数(max← next),否则最大数保持不变; • (3)n个数要进行n-1次比较

  4. #include “stdio.h” main() {int max, next, n; scanf(“%d”,&next); max=next; for (n=2;n<=10; n++) {scanf(“%d”,&next); if (next>max) max=next; } printf(“max=%d\n”, max); } /* 第一个数就是最大数 */ /* 输入另外的九个数,并依次比较出最大数 */ /* 打印出最大数 */

  5. 问题:求出以“9999”作为结束标志的一组整数的最大数。例如输入:123 45 5678 34 9999 67 23456,输出结果为5678,即对9999及其以后的数不作处理。 #include “stdio.h” main() {int max, next, n; scanf(“%d”,&next); max=next; for ( ; next!=9999; scanf(“%d”,&next) ) { if (next>max) max=next; } if (max!=9999) printf(“max=%d\n”, max); } /* 第一个数就是最大数 */

  6. 问题描述:5位跳水高手参加10米高台跳水决赛,有好事者让5人据实力预测比赛结果.问题描述:5位跳水高手参加10米高台跳水决赛,有好事者让5人据实力预测比赛结果. •   A选手说:B第二,我第三; •   B选手说:我第二,E第四; •   C选手说:我第一,D第二; •   D选手说:C最后,我第三; •   E选手说:我第四,A第一. • 决赛成绩公布之后,每位选手的预测都只说对了一半,即一对一错.请编程解出比赛的实际名次.

  7. #include <iostream.h> void main() { int cc1,cc2,cc3,cc4,cc5; int A,B,C,D,E; int g; for(A=1; A<=5; A++) for(B=1; B<=5; B++) for(C=1; C<=5; C++) for(D=1; D<=5; D++) for(E=1; E<=5; E++) { cc1=((B==2)&&(!(A==3)))||((!(B==2))&&(A==3)); cc2=((B==2)&&(!(E==4)))||((!(B==2))&&(E==4)); cc3=((C==1)&&(!(D==2)))||((!(C==1))&&(D==2)); cc4=((C==5)&&(!(D==3)))||((!(C==5))&&(D==3)); cc5=((E==4)&&(!(A==1)))||((!(E==4))&&(A==1)); if(((cc1+cc2+cc3+cc4+cc5)==5)&&(A!=B)&&(A!=C)&&(A!=D)&&(A!=E)&&(B!=C)&&(B!=D)&&(B!=E)&&(C!=D)&&(C!=E)&&(D!=E)) { g=1; printf("A %d\n", A); printf("B %d\n", B); printf("C %d\n", C); printf("D %d\n", D); printf("E %d\n", E); }}; if(g!=1) printf("Can't found!\n"); } /* cc1到cc5代表5位选手的逻辑判断 */ /* A,B,C,D,E分别代表5位选手的名次 */ /* 问题是否解决的BOOL值 */

  8. 题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。

  9. main() { char i,j,k; for(i='x';i<='z';i++) for(j='x';j<='z';j++) { if(i!=j) for(k='x';k<='z';k++) { if(i!=k&&j!=k) { if(i!='x'&&k!='x'&&k!='z') printf("order is a--%c\tb--%c\tc--%c\n",i,j,k); } } } } /* i是a的对手,j是b的对手,k是c的对手 */

  10. 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 • 程序分析:利用辗除法 • GCD(A, B)=GCD(B, A%B) • 当A%B==0时,B即为最大公约数 • GCD(12,18)=GCD(18,12) • =GCD(12,6) • =GCD(6,0) • 所以12和18的最大公约数为6

  11. main() { int a,b,temp; printf("please input two numbers:\n"); scanf("%d,%d",&a,&b); while(b!=0) /*利用辗除法,直到b为0为止*/ { temp=a%b; a=b; b=temp; } printf("gongyueshu:%d\n",a); } 问题:若要求两个数的最小公倍数,该如何修改程序?

  12. 素数问题:从键盘上任意输入一个十进制整数,判断该数是否是一个素数。若是,则输出“该数是素数”;否则输出“该项数不是素数”。素数问题:从键盘上任意输入一个十进制整数,判断该数是否是一个素数。若是,则输出“该数是素数”;否则输出“该项数不是素数”。 • 算法分析: • (1)增加标志flag。flag=1表示是素数,flag=0表示不是素数。、 • (2)一个数只能被1和其本身整除,就是素数,因此需从2到n-1逐一判断(实际只需要到n/2)

  13. #include “stdio.h” main() { int n, i,flag=1; printf(“请输入一个十进制整数”); scanf(“%d”,&n); for (i=2;i<n/2; i++) if (n%i==0) { flag=0; break; } if (flag==1) printf(“该数是素数”); else printf(“该数不是素数”); }

  14. 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。 • 程序分析:采取逆向思维的方法,从后往前推断。 • T N=T N-1-(T N-1 / 2+1) • T N-1=2*T N + 2 • T10=1(倒推出T N,N=9,8,……1)

  15. main() { int day,x1,x2; day=9; x2=1; while(day>0) {x1=(x2+1)*2; x2=x1; day--; } printf("the total is %d\n",x1); } /*第一天的桃子数是第2天桃子数加1后的2倍*/

  16. main() { int day,x=1; for(day=9;day<=1;day- -) x=(x+1)*2; printf("the total is %d\n",x); }

  17. 题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。 • 分析:当num1!=0时, • 分离个位数n,位数k++,同时num2=num2*10+n • 丢去num1的个位数,并重复以上操作

  18. main() {long num1, num2=0; int k=0, n; scanf(“%ld”, &num1); while (num1!=0) {k++; n=num1%10; num2=num2*10+n; num1=num1/10;} printf(“num1是一个%ld位数\n”, k); printf(“num2=%d\n”, num2); } /*定义可处理的数据范围是长整型数*/ num1为原始数据,num2为倒序数据, k为num1的位数,n为num1分离出的个位数

  19. 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? • 程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。

  20. #include "math.h" main() { long int i,x,y,z; for (i=1;i<100000;i++) { x=sqrt(i+100); y=sqrt(i+268); if(x*x==i+100&&y*y==i+268) printf("\n%ld\n",i); } } /*x为加上100后开方后的结果*/ /*y为再加上168后开方后的结果*/ /*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/

  21. 题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。

  22. main() {int a,i,aa[4],t; scanf("%d",&a); aa[0]=a%10; aa[1]=a%100/10; aa[2]=a%1000/100; aa[3]=a/1000; for(i=0;i<=3;i++) {aa[i]+=5; aa[i]%=10; } for(i=0;i<=3/2;i++) {t=aa[i]; aa[i]=aa[3-i]; aa[3-i]=t; } for(i=3;i>=0;i--) printf("%d",aa[i]); } /*每位数加5取余作为加密码*/ /* 1、3交换,2、4交换 */

  23. 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? • 程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... • 即从第三项开始,其每一项是前两项之和

  24. 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; } } /*控制输出,每行四个*/ /*前两个月加起来赋值给第三个月*/ /*前两个月加起来赋值给第三个月*/

  25. 题目:打印出杨辉三角形(要求打印出10行如下图)   1.程序分析:题目:打印出杨辉三角形(要求打印出10行如下图)   1.程序分析: • 1 1 1 1 2 1 13 31 146 4 1 1510105 1

  26. main() {int i, j, a[10][10]; printf("\n"); for(i=0;i<10;i++) {a[i][0]=1; a[i][i]=1;} for(i=2;i<10;i++) for(j=1;j<i;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=0;i<10;i++) {for(j=0;j<=i;j++) printf("%5d",a[i][j]); printf("\n"); } } /* 每行的第一和最后一个元素为1 */ /* 每行中间元素值的确定 */ /* 第i行打印i个元素 */

  27. 冒泡排序法:从键盘上输入一组数,将其按从大到小的顺序输出。冒泡排序法:从键盘上输入一组数,将其按从大到小的顺序输出。 算法描述: (1)每每相邻的两个数比较,使得大数下沉,小数上浮(内循环共进行n-1次); (2) 反复进行以上操作,直到所有的数排序结束(外循环共n-1轮) (3)若要提高效率,可以改变内循环次或加上标志位的方法

  28. #include “stdio.h” main() { int a[10], i, j, temp; for (i=0; i<n-1;i++) scanf(“%5d”, a[i]); for (i=0; i<n-1; i++) for (j=0; j<n-1; j++) if (a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1];a[j+1]=temp;} for (i=0; i<n-1;i++) printf(“%5d”, a[i]); } /* 可改为 for(j=0; j<n-1-i; j++) */

  29. 设有N个人围坐在圆桌周围,从每个位置开始用自然数进行编码为1、2、3、……N。然后成编号为K的人从1开始报数,数到M的人便出列;下一个人(第M+1个)人由从一开始报数,数到M的人便使第二个出列的人。如此下去,直到最后一个人出列为止。要求输出这个序列的顺序。 a[ i ]=1 在位置上 a[ i ]=0 不在位置上,已出列 sum=0 若sum==0 一人出列,打印其位置,sum清0

  30. main() { int j, k=0,sum=0; int a[21]; for (i=1;i<21;i++) a[ i ]=1; while (k<20) { for ( j=1; j<21; j++ ) { sum+=a[ j ]; if (sum==7) { printf(“%6d”, j); a[ j ]=0; sum=0;k++; } } } }

More Related