中国大学MOOC-翁恺-C语言-PAT习题及解答-第四周

  • Post author:
  • Post category:其他


#include <stdio.h>



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

main()
{
	int n,i,j,k,x=0;
	printf("input>>> ");
	scanf("%d",&n);
	for(i=n; i<n+4; ++i)
		for(j=n; j<n+4; ++j)
			for(k=n; k<n+4; ++k){
				if(i!=j && j!=k &&i!=k){
					x++;
					if(x % 6 == 0){
						printf("%d%d%d\n",i,j,k);
					}else{
						printf("%d%d%d ",i,j,k);
					}
				}
			}
	return 0;
}



04-1. 水仙花数(20)

水仙花数是指一个N位正整数(N>=3),它的每个位上的数字的N次幂之和等于它

本身。例如:153 = 1^3 + 5^3+ 3^3。本题要求编写程序,计算所有N位水仙花数。

输入格式:输入在一行中给出一个正整数N(3<=N<=7)。

输出格式:按递增顺序输出所有N位水仙花数,每个数字占一行。

输入样例:3

输出样例:

153

370

371

407

int main()
{
	int n;
	printf("input>>>");
	scanf("%d", n);
	int i;
	int first = 1;
	for(i=1; i<n; i++){
		first *= 10;
	}
//	printf("first:%d",first);
	for(i=first; i<first*10; i++){
		int tmp = i;
		int res = 0;
		int j;
		for(j=0; j<n; j++){
			int r = tmp % 10;
			tmp /= 10;
			res += r*r*r;
		}
		if(res == i){
			printf("%d\n", i);
		}
	}	
	return 0;
}



04-2. 打印九九口诀表(15)

本题要求对任意给定的1位正整数N,输出从1

1到N

N的部分口诀表。

输入格式:输入在一行中给出一个正整数N(1<=N<=9)。

输出格式:输出下三角N*N部分口诀表,其中等号右边数字占4位、左对齐。

输入样例:4

输出样例:

1

1=1

1

2=2 2

2=4

1

3=3 2

3=6 3

3=9

1

4=4 2

4=8 3

4=12 4

4=16

main()
{
	int i,j,n;
	printf("input>>> ");
	scanf("%d",&n);
	for(i=1; i<=n; i++)
		for(j=1; j<=i; j++){
			printf("%d * %d = %d", j, i, j*i);
			if(i == j){
				printf("\n");
			}else{
				if(i*j<10) 
					printf("   ");
				else
					printf("  ");
			}
		}
	return 0;
}



04-3. 统计素数并求和(20)

本题要求统计给定整数M和N区间内素数的个数并对它们求和。

输入格式:输入在一行中给出2个正整数M和N(1<=M<=N<=500)。

输出格式:在一行中顺序输出M和N区间内素数的个数以及它们的和,以空格分隔。

输入样例:10 31

输出样例:7 143

int main()
{
	int a,b,i,n;
	int num=0,total=0;
	printf("input>>> ");
	scanf("%d %d",&a,&b);
	if(a == 1){
		a = 2;     // 1为非负数 
	}
	for(n=a; n<=b; n++){
		int tag = 0;
		for(i=2; i<n; i++){
			if(n % i == 0){
				tag = 1;
				continue;	
			}
		}
		if(tag == 0){
			num++;
			total += n;
			printf("素数:%d ",n);		
		}
	}	
	printf("\n%d %d", num, total);
	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!

int main()
{
	int init, n;
	printf("input>>> ");
	scanf("%d %d", &init, &n);
	
	printf("\n**** 游戏开始 ****\n"); 
	int r,m=1; 
	while(r>=0 && m<=n){
		scanf("%d", &r);
		if(r > init)
			printf("Too big\n");
		else if(r < init && r >= 0)
			printf("Too small\n");
		else if(r == init && m == 1){
			printf("Bingo!\n");
			break;
		}
		else if(r == init && m<=3){
			printf("Lucky you!\n");
			break;
		}
		else if(r == init && m > 3){
			printf("Good Guess!\n");
			break;
		}
		m++;
	}
	if(m > n || r < 0)
		printf("Game over");
	
	return 0;
}