4.x习题
4.0求符合给定条件的整数集

算法:1、初始化,输入a。n1。
a做三位数的第一位。
n1做三位数的第二位,范围为a-a+4。如果跟a重叠则跳过,否则赋值给n1。
n2做三位数的第三位,范围为a-a+4。但如果跟a n1重叠则跳过这个数,否则输出(a n1 n2)。
回到n1步骤,若n1>a+4跳出循环。
回到a步骤,a++
判断a是否在+4的范围内,如果在范围内则回到xxx;不在则跳出循环。
#include <stdio.h> int main() { int a,n1,n2; scanf("%d",&a); n1=a;n2=a; while (a<=a+3) { while (n1<=a+3) { if (n1==a) { break; } while (n2<=a+3) { if (n2==a||n2==n1) { break; } printf("%d%d%d ",a,n1,n2); } n1++; } a++; printf("\n"); } return 0; }
结果重复3。a在不断变化a++,所以永远都不能满足a<=a+3。
#include <stdio.h> int main() { int a,i,j,k,cnt; scanf("%d",&a); i=a; while (i<=a+3) { j=a; while (j<=a+3) { k=a; while(k<=a+3) { if (i!=j) { if(i!=k) { if (j!=k) { cnt++; printf("%d%d%d",i,j,k); if (cnt==6) { printf("\n"); cnt=0; }else { printf(" "); } } } } k++; } j++; } i++; } return 0; }
保留初值,ijk分别代表三位数,cnt代表开头每个数字一行的计数,数字到了回车下一行。
4.1 水仙花数——不能理解




#include <stdio.h> int main() { int n; scanf("%d",&n); n=3; int first=1; int i=1; while (i<n) { first *=10; i++; } // printf("first=%d\n",first); //遍历100-999 i=first; while (i<first*10) { int t=i; int sum=0; do{ int d=t%10; t/=10; int p=d; int j=1; while (j<n) { p*=d; j++; } sum+=p; }while (t>0); if (sum==i) { printf("%d\n",i); } i++; } return 0; }
4.2打印九九乘法表

算法:1、初始化一个n=1代表行数。初始化一个i代表列数。
3、从i=1开始,每做n*i时,i++,直至i==n。(一个循环)
4、一行算术结束后,n++,i=1,回车下一行。回到第三步。(两个循环)。
#include <stdio.h> int main() { int n=1,i; while (n<=9) { i=1; while (i<=n) { printf("%d*%d=%d ",n,i,n*i); i++; } n++; printf("\n"); } return 0; }
4.3统计素数并求和

素数一般指质数。质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
问题:1、怎么判断素数。数字太大怎么办。

#include <stdio.h> int main() { // int n,m,sum=0,i; // printf("输入1-500的数:"); // scanf("%d %d"&n,&m); // i=n;//保留初始值 // //判定素数,判定为是的情况下输出该质数,并让sum加上该数。 // while (i<=m) // { // } double x,y,i; int a,b; x=3.0;//double? do { i=2.0;//从2开始除,判定 do { y=x/i; a=(int)y;//y是double,没有(int)会变成double类型 if (y!=a)//判断是否可以整除 { if (i==x-1)//如果i是x-1还没有可以整除的数字就说明是质数了,输出该质数 { b=(int)x; printf("%d\n",b); } } i++;//不能整除就i++,继续除除看 } while (y!=a);//可以整除跳出这个数字,继续下一个数字。 x++; } while (x<=10000);//3-10000质数 return 0; }
#include <stdio.h> int main() { int a,b,sum=0; double n,m,x,y,i; printf("输入1-500范围:"); scanf("%d-%d",&n,&m); x=n; do { i=2.0; do { y=x/i; a=(int)y; if (y!=a) { if (i==x-1) { b=(int)x; printf("%d\n",b); sum +=b; } } i++; } while (y!=a); x++; } while (x<=m); printf("\n 质数总和%d",sum); return 0; }
一直在运行,没有出结果。
#include <stdio.h> int main() { int m,n,i,cnt=0,sum=0; scanf("%d %d",&m,&n); if (m==1) { m=2; } for ( i = m; i < n; i++) { int isp=1; int k; for ( k = 2; k < i-1; k++) { if (i%k==0) { isp=0; break; } } if (isp) { cnt++; sum+=i; } } printf("%d %d\n",cnt,sum); return 0; }
4.4猜数字游戏

随机:
int a = rand() % 51 + 13; //产生13~63的随机数
http://c.biancheng.net/view/2043.html
#include <stdio.h> // #include <stdlib.h> // #include <time.h> int main(){ int a; // srand((unsigned)time(NULL)); a = rand() % 51 + 13; printf("%d\n",a); return 0; } //可使用
算法:
1、生成一个随机数x,一个用户猜数字的变量a,猜的次数n。
2、do-while,第一次猜也是一次。输入a,与x比较大小,n++,若大则输出"big",小则输出"small",相等就是猜到了,显示“猜对了”并显示猜的次数n。如果n<1,提示bingo;n<3,提示lucky;n<=10,提示good guess;n>10,游戏结束game over。游戏结束之前,输入负数也会输出game over。
#include <stdio.h> int main() { int x,a,n=0; x=rand()%100+0; printf("%d",x); printf("猜数字:"); do { scanf("%d",&a); n++; if (a==x) { if (n=10) { printf("game over\n"); }else if (n==1) { printf("bingo\n"); }else if (n<=3&&n>1) { printf("lucky\n"); }else if (n<=10&&n>3) { printf("good\n"); }else break; }else if(a<0) { printf("game over\n"); break; }else if (a<x) { printf("小了,再猜:"); }else if (a>x) { printf("大了,再猜:"); } } while (n<=9); return 0; }
问题:随机数不随机只有一个数字,还需要研究原理。第10次后还是会判定大小才结束。
#include <stdio.h> int main() { int m=0,n=0; //int m=rand()%100+1;//随机的数 // int n=rand()%100+1;//猜的最大次数 int count=0;//次数 // int a=0; int guess=0;//猜的数字 int over=0;//游戏开始结束标识 scanf("%d %d",&m,&n); while (count<n&&over==0)//保持循环的条件是输入次数小于n并且有游戏继续的标识,两者不满足其一就会 { over=0;//游戏进行 scanf("%d",&guess);//猜数字 //一起判定不容易出现先后问题 if (guess<0) { printf("game over\n"); over=1; }else if (guess==m&&count==0) { printf("bingo\n"); over=1; }else if (guess==m&&count<3) { printf("lucky\n"); over=1; }else if (guess==m) { printf("good\n"); over=1; }else if (guess>m) { printf("big\n"); }else if (guess<m) { printf("small\n"); } count++; } if (over==0)//应该没有循环出来over==0,大于N就会出现这种情况 { printf("game over\n"); } return 0; }

浙公网安备 33010602011771号