XJTU_ 西安交通大学2020大学计算机作业-第七周

XJTU_ 西安交通大学2020大学计算机作业-第七周

XJTU_ 西安交通大学2020大学计算机作业-第七周

注:所有题均已通过所有用例。

文章已上传到github:https://github.com/nobodyXX/XJTU_C_homework/blob/main/week7,如果这篇文章带给你了帮助或者灵感,欢迎给我点个星星,谢谢!!!

第一题

从键盘输入一个小于等于1000的正整数x,输出其平方根(为整数)。若输入数大于1000,则输出0,并继续接受下一个输入直至小于等于1000。(提示:使用求平方根函数sqrt需要包含头文件)。

样例输入:
1200
1300
900
样例输出:
0
0
30

#include
int main() {
	for (int a = 1001; a > 1000;) {
		scanf("%d", &a);
		(a > 1000) ? printf("0\n") : printf("%d", (int)sqrt(a));
	}
	return 0;
}

第二题

读取3个数(1~10)的整数值,每读取一个值,程序打印出该值个数的英文星号(""""*"""")。

输入:3个整数,3行。

输出:3行星号。

样例输入:
1
2
3
样例输出:
*
**
*** (不用理会括号)

int main() {
	int a[3];
	scanf("%d %d %d", &a[0], &a[1], &a[2]);
	for (int i = 0; i <= 2; i++, printf("\n")) {
		for (int n = 0; n < a[i]; n++) {
			printf("*");
		}
	}
	return 0;
}
}

第三题

输入整数a和b,若aa+bb大于等于100,则输出aa+bb百位及以上的数字,否则输出aa+bb。例如,输入25 25 ,它们的平方和为625+625=1250,百位及以上数为12.

输入:两个整数,中间用空格隔开

输出:一个整数。

样例输入:13 50
样例输出:26

int main() {
	int a, b;
	scanf("%d%d",&a,&b);
	if (a * a + b * b >= 100) {
		printf("%d", (a * a + b * b) / 100);
	}
	else {
		printf("%d", a * a + b * b);
	}
	return 0;
}

第四题

输入若干个整数,其值在0至4的范围内,用-1作为输入结束的标志,统计每个整数的个数。

输入:[0,4]内的整数组成的序列,最后是-1,用空格隔开。

输出:0,1,2,3,4的统计个数,用一个空格隔开。

样例:

3 3 3 2 2 1 0 3 4 4 -1

1 1 2 4 2

样例输入:
4 4 2 4 0 1 1 3 3 0 4 4 1 1 1 0 3 -1
样例输出:
3 5 1 3 5

int main() {
	int a[100], b = -1, i[6] = {0, 0, 0, 0, 0, 0 };
	do {
	//while (scanf("%d", &a[b]) != '-1') {
		b++;
		scanf("%d", &a[b]);
		(a[b] == 0) ? i[1] = i[1] + 1 : 0;
		(a[b] == 1) ? i[2] = i[2] + 1 : 0;
		(a[b] == 2) ? i[3] = i[3] + 1 : 0;
		(a[b] == 3) ? i[4] = i[4] + 1 : 0;
		(a[b] == 4) ? i[5] = i[5] + 1 : 0;
	} while (a[b] != -1);
	printf("%d %d %d %d %d", i[1], i[2], i[3], i[4], i[5]);
	return 0;
}

第五题

某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:

  1. 每位数字都用自身加上5后的和除以10的余数代替,如1用6代替,8用3代替;如3768就转换为8213;

  2. 再将第一步生成的数字的第一位和第四位交换,第二位和第三位交换。 如8213转换为3128,即为最终的加密密码。

编写程序完成数据的加密,输入:一个整数。

输出:一个整数。

样例输入:
2233
样例输出:
8877

int main() {
	int a;
	scanf("%d", &a);
	for (int i = 10, n=0; n <= 3; a=a/10, n++) {//引入n是为了防止a以0开头
		printf("%d", (a%i + 5) % 10);
	}
	return 0;
}

第六题

找出m到n之间的所有同构数(m

说明:一个正整数x,如果是它平方数的尾部,则称x为同构数。例如,6是其平方数36的尾部,25是其平方数625的尾部,那么6和25都是同构数。

输入:

输入m和n两个正整数,用空格分隔。

输出:

连续输出同构数,数据间用空格分隔。

样例输入:
50 100
样例输出:
76

//V1初始版
int main() {
	int m, n, b = 1;
	scanf("%d %d", &m, &n);
	for (int a = 0; m <= n; m++) {//a是为了输出首尾无空格,把得数存在一个数组里输出数组也行。
		(m < 10) ? (((m*m) % 10 == m) ? ((a == 0) ? printf("%d", m),a++: printf(" %d", m)) : 0) : 0;
		(m < 100 && m >= 10) ? (((m*m) % 100 == m) ? ((a == 0) ? printf("%d", m), a++: printf(" %d", m)) : 0) : 0;
		(m < 1000 && m >= 100) ? (((m*m) % 1000 == m) ? ((a == 0) ? printf("%d", m), a++ : printf(" %d", m)) : 0) : 0;
		(m < 10000 && m >= 1000) ? (((m*m) % 10000 == m) ? ((a == 0) ? printf("%d", m), a++ : printf(" %d", m)) : 0) : 0; 
	}
	return 0;
}
//V2精简版
int main() {
	int m, n, b=1;
	scanf("%d %d", &m, &n);
	for (; b < m / 10;) { b = b * 10; }//判断m的位数并给b
	for (int a = 0; m <= n; m++) {//a是为了输出首尾无空格
		(m >= b && m <= b*10) ? (((m*m) % (b*10) == m) ? ((a == 0) ? printf("%d", m), a++ : printf(" %d", m)) : 0) : 0;//一句顶n句
		b = (m == b*10 && m != 1) ? b * 10 : b;
	}
	return 0;
}
//V3应试版
//这个应该也行,考试的时候可以这样搞
int week7_q5_2() {
	int a[] = { 1, 5, 6, 25, 76, 376, 625, 9376}, i=8, m, n;
	scanf("%d %d", &m, &n);
	for (; i <= 8; i++) {
		(a[i] >= m && a[i] <= n) ? printf("%d", a[i]) : 0;
	}
	return 0;
}

第七题

一个球从100米高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。求其在第n次落地时,共经过了多少米?第n次反弹高度是多少?

输入:

第n次的值,整数

输出:小球经过的路程长度和小球反弹的高度,分2行输出。

样例输入:
15
样例输出:
299.987793
0.003052

//也能像第六题一样精简,太懒了没弄
int main() {
	char d[11] = "abcdefghij";
	int a;
	scanf("%d", &a);
	printf("%d ", a = a / 2);
	for (int i = 0; a != -1; ) {
		(a < 10) ? printf("%c", d[a]), a = -1 : 0;
		(a >= 10 && a<100) ? printf("%c", d[a / 10]), a = a % 10 : 0;
		(a >= 100 && a < 1000) ? printf("%c", d[a / 100]), a = a % 100 : 0;
		(a >= 1000 && a < 10000) ? printf("%c", d[a / 1000]), a = a % 1000 : 0;
		(a >= 10000 && a < 100000) ? printf("%c", d[a / 10000]), a = a % 10000 : 0;
	}
	return 0;
}

第八题

编程判断任意一个正整数各位数字之和是奇数还是偶数。如果是奇数输出1,偶数输出0

样例输入:
201512013
样例输出:
1

int main() {
	int a, s = 0;
	scanf("%d", &a);
	for (; a != 0; a = a / 10) {
		s = s + a % 10;
	}
	(s % 2 == 0) ? printf("0") : printf("1");
	return 0;
}

第九题

编程求以下级数前n项之和:

s=1-1/3+1/5-1/7+…

样例输入:
30
样例输出:
0.777067

int main() {
	float s = 0, n;
	scanf("%f", &n);
	for (int i = 1, a = 1; i <= n; i++, a = a * (-1)) {
		s = s + a * 1.0 / (2 * i - 1);
	}
	printf("%f", s);
	return 0;
}

第十题

求a+aa+aaa+aaaa+…+aa…a(n个),其中a为1~9之间的整数。
例如:当a = 1, n = 3时,求1+11+111之和为123;
输入:组成序列的数字a和求和项的数量n
输出:算式和结果。

样例输入:
2 7
样例输出:
2+22+222+2222+22222+222222+2222222=2469134

int main() {
	int a, n, s = 0;
	scanf("%d%d", &a, &n);
	for (int b = a; n != 0; n--, a = a * 10 + b) {
		s = s + a;
		(n == 1) ? printf("%d", a) : printf("%d+", a);
	}
	printf("=%d", s);
	return 0;
}

第十一题

编程,找出[m,n]范围内是7的倍数或带7的全部正整数,m和n为正整数。

样例输入:
1 20
样例输出:
7是7的倍数
7是带7的数
14是7的倍数
17是带7的数

int main() {
	int m, n;
	scanf("%d%d", &m, &n);
	for (; m != n + 1; m++) {
		(m % 7 == 0) ? printf("%d是7的倍数\n", m) : 0;
		for (int a = m; a != 0; a = a / 10) {
			(a % 10 == 7) ? printf("%d是带7的数\n", m), a = 0 : 0;
		}
	}
	return 0;
}

第十二题

“水仙花数”是指一个三位正整数,其各位数字的立方和确好等于该数本身,如:153=13+53+3^3 (其中表示乘方,53表示5的3次方),则153是一个“水仙花数”。
输入n, m,100<=n,m<1000, 求出[n,m]之间的水仙花数。若该区间没有水仙花数,输出-1.
输入:n,m,用空格隔开。
输出:若干水仙花数,用空格隔开。

样例输入:
100 500
样例输出:
153 370 371 407

int main() { //用pow函数可以让代码更简洁
	int m, n, l[3], x=0;
	scanf("%d%d", &m, &n);
	for (; m != n + 1; m++) {
		for (int i = 0, a = m; i <= 2; a = a / 10, i++) {
			l[i] = a % 10;
		}
		((l[0] * l[0] * l[0] + l[1] * l[1] * l[1] + l[2] * l[2] * l[2]) == m) ? ((x==0) ? printf("%d", m) : printf(" %d", m)), x++ : 0;
	}
	(x == 0) ? printf("-1") : 0;
	return 0;
}

第十三题

若三个正整数a,b,c满足 a2+b2=c2,则它们是一组勾股数。(2表示平方,a^表示a的平方)。

编写程序,求给定区间[m,n]中的勾股数的数量(设一组勾股数满足a0.

输出:[m,n]中的勾股数的数量

样例输入:
1 100
样例输出:
52

int main() { 
	int m, n, x = 0;
	scanf("%d%d", &m, &n);
	for (int i = m; m != n + 1; m++) {//注意区间是[m,n]
		for (int a = i; a < m; a++) {
			for (int b = i; b < a; b++) {
				((a * a + b * b) == m * m) ? x++ : 0;
			}
		}
	}
	printf("%d", x);
	return 0;
}

第十四题

输入任意一个正整数,计算各位数字的平方和。如:1234 则:计算11+22+33+44=30

输入:一个正整数。

输出:整数

样例输入:
8
样例输出:
64

int main() {
	int a, s = 0;
	scanf("%d", &a);
	for (; a != 0; a = a / 10) {
		s = s + (a % 10)*(a % 10);
	}
	printf("%d", s);
	return 0;
}

第十五题

编写程序检验由三边能否构成三角形,检验方法是任意两边和均要大于第三边。

输入:三边长度
输出:若果可以构成,输出YES,否则输出ERROR DATA

样例输入:
1 1 2
样例输出:
ERROR DATA

int main() {
	float a, b, c;
	scanf("%f%f%f", &a, &b, &c);
	((a + b) > c&&(a + c) > b&&(b + c) > a) ? printf("YES") : printf("ERROR DATA");
	return 0;
}

第?题

好像少写了一道题。

将数字替换为字母。输入一个整数,将它除以2;再将除以2后所得数字的整数部分的各位用相应序号的字母替代。替换原则:0换为a,1换为b,2换为c,…,以此类推,9换为j。

例如,1234,除以2等于617,替换结果为gbh

输入:一个正整数

输出:除2后的整数整数部分和字符串,中间以一个空格隔开。

样例:

1234

617 gbh

样例输入:
2
样例输出:
1 b

int main()
{
	char a[11] = "abcdefghij",b[100];
	int n, i = 0;
	scanf("%d", &n);
	printf("%d ", n = n / 2);
	sprintf(b, "%d", n);//把n以%d的形式给字符串b
	for (int i = 0; b[i]!='\0'; i++)(n < 10) ? printf("%c", a[b[i] - 48]), i=0 : printf("%c", a[b[i] - 48]);//0-9对应的ascii码是48-57
	return 0;
}

都看到这儿了,点个星星呗https://github.com/nobodyXX/XJTU_C_homework/blob/main/week7

你可能感兴趣的:(大计基作业,1024程序员节,c语言)