04-0. 求符合给定条件的整数集(15)
给定不超过6的正整数A,考虑从A开始的连续4个数字。请输出所有由它们组成的无重复数字的3位数。
输入格式:
输入在一行中给出A。
输出格式:
输出满足条件的的3位数,要求从小到大,每行6个整数。整数间以空格分隔,但行末不能有多余空格。
输入样例:
2
输出样例:
234 235 243 245 253 254
324 325 342 345 352 354
423 425 432 435 452 453
523 524 532 534 542 543
#include <stdio.h>
int main()
{
int a;
scanf("%d",&a);
int i,j,k;
int cnt = 0;
for(i=a ; i<=a+3 ; i++){
for(j=a ; j<=a+3 ; j++){
for(k=a ; k<=a+3 ; k++){
if(i!=j && i!=k && j!=k){
printf("%d%d%d",i,j,k);
cnt++;
if(cnt == 6){
printf("\n");
cnt = 0;
}
else{
printf(" ");
}
}
}
}
}
return 0;
}
04-1. 水仙花数(20)
水仙花数是指一个N位正整数(N>=3),它的每个位上的数字的N次幂之和等于它本身。例 如:153 = 1 3 1^313+5 3 5^353+3 3 3^333。 本题要求编写程序,计算所有N位水仙花数。
输入格式:
输入在一行中给出一个正整数N(3<=N<=7)。
输出格式:
按递增顺序输出所有N位水仙花数,每个数字占一行。
输入样例:
3
输出样例:
153
370
371
407
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int first = 1;
int i = 1;
while(i <n){
first *= 10;
i++;
}
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;
}
04-2. 打印九九口诀表(15)
下面是一个完整的下三角九九口诀表:
11=1
12=2 22=4
13=3 23=6 33=9
14=4 24=8 34=12 44=16
15=5 25=10 35=15 45=20 55=25
16=6 26=12 36=18 46=24 56=30 66=36
17=7 27=14 37=21 47=28 57=35 67=42 77=49
18=8 28=16 38=24 48=32 58=40 68=48 78=56 88=64
19=9 29=18 39=27 49=36 59=45 69=54 79=63 89=72 99=81
本题要求对任意给定的1位正整数N,输出从11到N*N的部分口诀表。
输入格式:
输入在一行中给出一个正整数N(1<=N<=9)。
输出格式:
输出下三角N*N部分口诀表,其中等号右边数字占4位、左对齐。
输入样例:
4
输出样例:
11=1
12=2 22=4
13=3 23=6 33=9
14=4 24=8 34=12 44=16
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int i,j;
i = 1;
while( i<=n){
j=1;
while( j<=i ){
printf("%d*%d=%d",j,i,i*j);
printf(" ");
j++;
}
printf("\n");
i++;
}
return 0;
}
04-3. 统计素数并求和(20)
本题要求统计给定整数M和N区间内素数的个数并对它们求和。
输入格式:
输入在一行中给出2个正整数M和N(1<=M<=N<=500)。
输出格式:
在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。
输入样例:
10 31
输出样例:
7 143
#include <stdio.h>
int main()
{
int a,b;
scanf("%d%d", &a, &b);
int i, j, flag;
int sum = 0;
int count = 0;
for (i = a; i <= b; i++)
{
flag = 0;
for (j = 2; j < i; j++)
{
if (i%j == 0)
{
flag = 1;
break;
}
}
if (flag == 0 && i != 1)
{
count++;
sum = sum + i;
}
}
printf("%d %d",count, sum);
return 0;
}
04-4. 猜数字游戏(15)
猜数字游戏是令系统随机产生一个100以内的正整数,用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较,并提示大了(“Too big”),还是小了(“Too small”),相等表示猜到了。如果猜到,则结束程序。程序还要求统计猜的次数,如果1次猜出该数,提示“Bingo!”;如果3次以内猜到该数,则提示“Lucky You!”;如果超过3次但是在N(>3)次以内(包括第N次)猜到该数,则提示“Good Guess!”;如果超过N次都没有猜到,则提示“Game Over”,并结束程序。如果在到达N次之前,用户输入了一个负数,也输出“Game Over”,并结束程序。
输入格式:
输入第一行中给出2个不超过100的正整数,分别是系统产生的随机数、以及猜测的最大次数N。随后每行给出一个用户的输入,直到出现负数为止。
输出格式:
在一行中输出每次猜测相应的结果,直到输出猜对的结果或“Game Over”则结束。
输入样例:
58 4
70
50
56
58
60
-2
输出样例:
Too big
Too small
Too small
Good Guess!
#include <stdio.h>
int main()
{
int number = rand()%100+1;
int count = 1;
int a,n;
scanf("%d %d",&a,&n);
if(a==number){
printf("Bingo!\n");
return 0;
}
do{
if(a<0){
printf("Game Over\n");
break;
}
else{
if ( a > number ) {
printf("TOO big\n");
}
else if ( a < number ) {
printf("TOO small\n");
}
}
scanf("%d",&a);
count++;
if(count>n){
printf("Game Over\n");
break;
}
}while(a!=number);
if(a==number){
if(count==2 || count==3){
printf("Lucky You!\n");
}
else if(count>3 && count<=n){
printf("Good Guess!\n");
}
}
return 0;
}