C语言程序设计精髓 第8周—— 一堆数据来了,你准备好了吗 练兵区——编程题

1三天打渔两天晒网(4分)

题目内容:

中国有句俗语叫“三天打鱼两天晒网”,某人从1990年1月1日起开始“三天打鱼两天晒网”,即工作三天,然后再休息两天。问这个人在以后的某一天中是在工作还是在休息。从键盘任意输入一天,编程判断他是在工作还是在休息,如果是在工作,则输出:He is working,如果是在休息,则输出:He is having a rest,如果输入的年份小于1990或者输入的月份和日期不合法,则输出:Invalid input。

输入格式: “%4d-%2d-%2d”

输出格式:

“Invalid input” 或

“He is having a rest” 或

“He is working”

输入样例1:

2014-12-22

输出样例1:

He is working

输入样例2:

2014-12-24

输出样例2:

He is having a rest

输入样例3:

2014-12-32

输出样例3:

Invalid input

注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!

时间限制:500ms内存限制:32000kb
C

#include <stdio.h>
#include <math.h>
int days[][12]={{31,28,31,30,31,30,31,31,30,31,30,31}
			,{31,29,31,30,31,30,31,31,30,31,30,31}};
int IsLeapYear(int y){
	return y%4==0 && y%100!=0 || y%400==0;
}
int getDays(int y, int m, int d){
	int i=0, sum=0;
	for(i=1990; i<y; ++i){
		if(IsLeapYear(i)) sum+=366;
		else sum+=365;
	}
	for(i=0; i<m-1; ++i){
		sum+=days[IsLeapYear(y)][i];
	}
	return sum+d;
}
int main( )
{
	int y,m,d;
	scanf("%4d-%2d-%2d", &y, &m, &d);
	if(y<1990 || m>12 || m<1 || d<0 ||d>days[IsLeapYear(y)][m-1]){
		printf("Invalid input\n");
	} else if(getDays(y,m,d)%5<=3 && getDays(y,m,d)%5>=1){
		printf("He is working\n");
	} else {
		printf("He is having a rest\n");
	}
    return 0;
}

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 1ms 256kb
1
用例2通过 1ms 256kb
1
用例3通过 1ms 136kb
1
用例4通过 1ms 256kb
1
提交答案本次得分/总分:4.00/4.00分

2统计用户输入(4分)

题目内容:

从键盘读取用户输入直到遇到#字符,编写程序统计读取的空格数目、读取的换行符数目以及读取的所有其他字符数目。(要求用getchar()输入字符)

程序运行结果示例1:

Please input a string end by #:

abc def↙

jklm op↙

zkm #↙

space: 3,newline: 2,others: 15

程序运行结果示例2:

Please input a string end by #:

hello friend!#↙

space: 1,newline: 0,others: 12

输入提示信息:“Please input a string end by #:\n”

输入格式: getchar()

输出格式: “space: %d,newline: %d,others: %d\n”

注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!

时间限制:500ms内存限制:32000kb
C

#include <stdio.h>
#include <math.h>

int main( )
{
	int c1=0, c2=0, c3=0;
	printf("Please input a string end by #:\n");
	char ch;
	do{
		ch=getchar();
		if(ch==' ') c1++;
		else if(ch=='\n') c2++;
		else c3++;
	}while(ch!='#');
	printf( "space: %d,newline: %d,others: %d\n", c1, c2, c3-1);
    return 0;
}

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 256kb
2
用例2通过 2ms 256kb
2
提交答案本次得分/总分:4.00/4.00分

3统计正整数中指定数字的个数(4分)

题目内容:

从键盘输入一个正整数number,求其中含有指定数字digit的个数。例如:从键盘输入正整数number=1222,若digit=2,则1223中含有 3个2,要求用函数实现。函数原型为:int CountDigit(int number,int digit);

程序运行结果示例1:

Input m,n:

1222,2↙

3

程序运行结果示例2:

Input m,n:

1234,6↙

0

输入提示信息:“Input m,n:\n”

输入格式: “%d,%d”

输出格式: “%d\n”

注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!

时间限制:500ms内存限制:32000kb
C

#include <stdio.h>
#include <math.h>
int CountDigit(int number,int digit){
	int cnt=0;
	while(number){
		if(number%10==digit) cnt++;
		number/=10;
	}
	return cnt;
}
int main( )
{
	printf("Input m,n:\n");
	int m,n;
	scanf("%d,%d", &m, &n);
    printf("%d\n", CountDigit(m,n));
	return 0;
}

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 6ms 256kb
2
用例2通过 2ms 256kb
2
提交答案本次得分/总分:4.00/4.00分

4玫瑰花数(4分)

题目内容:

如果一个n位正整数等于它的n个数字的n次方和,则称该数为n位自方幂数。四位自方幂数称为玫瑰花数。编程计算并输出所有的玫瑰花数。

输入格式:无

输出格式:"%d\n"

注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!

时间限制:500ms内存限制:32000kb
C

#include <stdio.h>
#include <math.h>
int Pow(int i){
	return i*i*i*i; 
}
int Rose(int n){
	int a,b,c,d;
	a=n/1000;
	b=n/100%10;
	c=n/10%10;
	d=n%10;
	if(Pow(a)+Pow(b)+Pow(c)+Pow(d)==n) return 1;
	else return 0;
}
int main( )
{
	int i=1000;
	for(; i<=9999; ++i){
		if(Rose(i)){
			printf("%d\n", i);
		}
	}
	return 0;
}

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 256kb
4
提交答案本次得分/总分:4.00/4.00分

5四位反序数(4分)

题目内容:

反序数就是将整数的数字倒过来形成的整数。例如,1234的反序数是4321。设N是一个四位数,它的9倍恰好是其反序数,编程计算并输出N的值。

输入格式: 无

输出格式:"%d\n"

注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!

时间限制:500ms内存限制:32000kb
C

#include <stdio.h>
#include <math.h>

int func(int n){
	int a,b,c,d;
	a=n/1000;
	b=n/100%10;
	c=n/10%10;
	d=n%10;
	if(d*1000+c*100+b*10+a==9*n) return 1;
	else return 0;
}
int main( )
{
	int i=1000;
	for(; i<=9999; ++i){
		if(func(i)){
			printf("%d\n", i);
		}
	}
	return 0;
}

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 256kb
4
提交答案本次得分/总分:4.00/4.00分

68除不尽的自然数(4分)

题目内容:

一个自然数被8除余1,所得的商被8除也余1,再将第二次的商被8除后余7,最后得到一个商为a。又知这个自然数被17除余4,所得的商被17除余15,最后得到一个商是a的2倍。求满足以上条件的最小自然数。

输入格式: 无

输出格式:"%d\n"

注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!

时间限制:500ms内存限制:32000kb
C

#include <stdio.h>
#include <math.h>

int func(int n){
	int a=n/8/8/8, b=n/17/17;
	if(n%8!=1 || n%17!=4) return 0;
	else if((n/8)%8!=1 || (n/17)%17!=15) return 0;
	else if((n/8/8)%8!=7) return 0;
	else if(a*2!=b) return 0;
	else return 1;
}
int main( )
{
	int i=0;
	for(; i<=99999; ++i){
		if(func(i)){
			printf("%d\n", i);
		}
	}
	return 0;
}

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 12ms 256kb
4
提交答案本次得分/总分:4.00/4.00分

7矩阵转置v1.0(4分)

题目内容:

用二维数组作为函数参数,编程计算并输出n×n阶矩阵的转置矩阵。其中,n的值不超过10,n的值由用户从键盘输入。

程序运行结果示例1:

Input n:3↙

Input 3*3 matrix:

1 2 3↙

4 5 6↙

7 8 9↙

The transposed matrix is:

1 4 7

2 5 8

3 6 9

程序运行结果示例2:

Input n:2↙

Input 2*2 matrix:

1 2↙

4 5↙

The transposed matrix is:

1 4

2 5

输入提示信息:

提示输入矩阵的阶数:“Input n:”

提示输入矩阵数据:“Input %d*%d matrix:\n”

输入格式: “%d”

输出提示信息:“The transposed matrix is:\n”

输出格式:"%4d"

注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!

时间限制:500ms内存限制:32000kb
C

#include <stdio.h>
#include <math.h>

int main( )
{
	int a[11][11], n, i, j;
	printf("Input n:");
	scanf("%d", &n);
	printf("Input %d*%d matrix:\n", n, n);
	for(i=0; i<n; ++i){
		for(j=0; j<n; ++j){
			scanf("%d", &a[i][j]);
		}
	}
	printf("The transposed matrix is:\n");
	for(j=0; j<n; ++j){
		for(i=0; i<n; ++i){
			printf("%4d", a[i][j]);
		}
		printf("\n");
	}
	return 0;
}

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 256kb
2
用例2通过 2ms 256kb
2
提交答案本次得分/总分:4.00/4.00分

8兔子生崽问题(4分)

题目内容:

假设一对小兔的成熟期是一个月,即一个月可长成成兔,那么如果每对成兔每个月都可以生一对小兔,一对新生的小兔从第二个月起就开始生兔子,试问从一对兔子开始繁殖,n(n<=12)月以后可有多少对兔子(即当年第n月份总计有多少对兔子,含成兔和小兔)?请编程求解该问题,n的值要求从键盘输入。

参考答案:依题意,兔子的繁殖情况如图所示。图中实线表示成兔仍是成兔或者小兔长成成兔;虚线表示成兔生小兔。观察分析此图可发现如下规律:

(1)每月小兔对数 = 上个月成兔对数。

(2)每月成兔对数 = 上个月成兔对数 + 上个月小兔对数。

综合(1)和(2)有:每月成兔对数 = 前两个月成兔对数之和。

用fn(n=1,2,…)表示第n个月成兔对数,于是可将上述规律表示为如下递推公式:

程序运行示例:

Input n(n<=12):

10↙

1 2 3 5 8 13 21 34 55 89

Total=89

输入提示:“Input n(n<=12):\n”

输入格式:"%d"

输出格式:

每个月兔子对数的输出格式: “%4d”

第12个月的兔子总数的输出格式: “\nTotal=%d\n”

注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!

时间限制:500ms内存限制:32000kb
C

#include <stdio.h>
#include <math.h>

int main( )
{
	int a[11], n, i, sum=1;
	printf("Input n(n<=12):\n");
	scanf("%d", &n);
	a[0]=1, a[1]=1;
	if(n==1) {
		printf("%4d", a[0]);
		return 0;
	} else {
		printf("%4d", a[0]);
		for(i=2; i<=n; ++i){
			a[i]=a[i-1]+a[i-2];
			sum+=a[i];
			printf("%4d", a[i]); 
		}
	}
	
	printf( "\nTotal=%d\n", a[n]);
	return 0;
}

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 256kb
2
用例2通过 2ms 256kb
1
用例3通过 2ms 128kb
1
提交答案本次得分/总分:4.00/4.00分

9抓交通肇事犯(4分)

题目内容:

一辆卡车违犯交通规则,撞人后逃跑。现场有三人目击事件,但都没记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是位数学家,他说:四位的车号刚好是一个整数的平方。现在请根据以上线索帮助警方找出车号以便尽快破案。

[提示]:假设这个4位数的前两位数字都是i,后两位数字都是j,则这个可能的4位数

k = 1000i + 100i + 10*j + j

式中,i和j都在0~9变化。此外,还应使k=m*m,m是整数。由于k是一个4位数,所以m值不可能小于31。

输入格式: 无

输出格式:“k=%d,m=%d\n”

注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!

时间限制:500ms内存限制:32000kb
C

#include <stdio.h>
#include <math.h>

int main( )
{
	int i, j, m, k;
	for(i=0; i<=9; ++i){
		for(j=0; j<=9; ++j){
			k = 1000*i + 100*i + 10*j + j;
			for(m=31; m<100; ++m){
				if(m*m==k){
					printf("k=%d,m=%d\n", k,m);
				}
			}
		}
	}
	return 0;
}

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 256kb
4
提交答案本次得分/总分:4.00/4.00分

10检验并打印幻方矩阵(4分)

题目内容:

幻方矩阵是指该矩阵中每一行、每一列、每一对角线上的元素之和都是相等的。从键盘输入一个5×5的矩阵并将其存入一个二维整型数组中,检验其是否为幻方矩阵,并将其按指定格式显示到屏幕上。

输入格式: “%d”

输出格式:

如果是幻方矩阵,输出提示信息: “It is a magic square!\n”

矩阵元素的输出: “%4d”(换行使用"\n")

如果不是幻方矩阵,输出提示信息: “It is not a magic square!\n”

输入样例1:

17_24_1_8_15

23_5_7_14_16

4_6_13_20_22

10_12_19_21_3

11_18_25_2_9

(输人样例中“_”代表空格)

输出样例1:

It is a magic square!

**17**24***1***8**15

**23***5***7**14**16

***4***6**13**20**22

**10**12**19**21***3

**11**18**25***2***9

(输出样例中“*”代表空格)

输入样例2:

1_0_1_6_1

3_1_1_1_1

1_1_1_1_2

1_1_1_1_1

9_1_7_1_1

(输人样例中“_”代表空格)

输出样例2:

It is not a magic square!

注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!

(输人样例中“_”代表空格,输出样例中“*”代表空格)

时间限制:500ms内存限制:32000kb
C

#include <stdio.h>
#include <math.h>

int main( )
{
	int a[9][9], i, j, m, k;
	for(i=0; i<=6; ++i){
		a[0][i]=0;	a[i][0]=0;  
	} 
	for(i=1; i<=5; ++i){
	
		for(j=1; j<=5; ++j){
			scanf("%d", &a[i][j]);
			a[i][0]+=a[i][j];
			a[0][j]+=a[i][j];
			if(i==j)
				a[0][0]+=a[i][j];
			if(i+j==6){
				a[0][6]+=a[i][j];
				a[6][0]+=a[i][j];
			}
			
		} 
	}
	for(i=1; i<=6; ++i){
		if(a[0][0]!=a[i][0] || a[0][0]!=a[0][i]){
			printf("It is not a magic square!");
			return 0;
		}
	}
	printf("It is a magic square!\n");
	for(i=1; i<=5; ++i){
		for(j=1; j<=5; ++j){
			printf("%4d", a[i][j]);
		}
		printf("\n");
	}
	return 0;
}

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 256kb
2
用例2通过 2ms 256kb
2
提交答案本次得分/总分:4.00/4.00分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值