第八周作业

输入若干个整数,其值在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
//我好废呀,代码不报错,但是不出结果,还不会调试,哭死,哪位道兄看见了帮忙改一下我的代码
//这段代码绝对有大问题,但是我不知道怎么改,应该是数读不进去,数组学得巨烂

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

int main()
{
	int a[200];
	int i;
	for (i = 0; ; i++)
	{
		scanf("%d", &a[i]);
}
	int zero=0,one = 0, two = 0, three = 0, four = 0;
	
	while (a[i] != -1)
	{
		switch (a[i])
		{
		case 0:zero++; break;
		case 1:one++; break;
		case 2:two++; break;
		case 3:three++; break;
		case 4:four++; break;
		}
		
    }
	printf("%d %d %d %d %d\n", zero, one, two, three, four);
	return 0;
}

//又重新更改了一下,要注意能让数被读到,所以循环里面的那个scanf就很重要
#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

int main()
{
	
	int n;
	int zero=0,one = 0, two = 0, three = 0, four = 0;
	scanf("%d", &n);
	while (n != -1)
	{
		switch (n)
		{
		case 0:zero++; break;
		case 1:one++; break;
		case 2:two++; break;
		case 3:three++; break;
		case 4:four++; break;
		}
		scanf("%d", &n);
    }
	printf("%d %d %d %d %d\n", zero, one, two, three, four);
	return 0;
}

//下面是我崔神写的,我可真是个猪脑得
#include<stdio.h>
int main()
{
	int stat[5] = { 0 };
	int input = 0;
	(void)scanf("%d", &input);
	while (input != -1)
	{
		stat[input]++;
		(void)scanf("%d", &input);

	}
	printf("%d", stat[0]);
	for (int i = 1; i < 5; i++)
	{
		printf(" %d", stat[i]);
	}
	
}

将一个大于4的正整数分解为连续的正整数之和,请显示全部分解结果。

如数字15,可以分解为:

15=1+2+3+4+5

15=4+5+6

15=7+8


样例输入:

6

样例输出:

6=1+2+3
//实锤啦,我就是废物哈哈哈,一点思路都莫得,下面是剽窃崔神的
#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

int main()
{
	unsigned n;
	scanf("%u", &n);

	
	for (unsigned i = 1; i <= n / 2; i++)
	{
		unsigned s = 0;
		unsigned j;
		for ( j = i; s <= n; j++)
		{
			s += j;

			if (s == n)
			{
				printf("%d=%d", n, i);
				for (unsigned k = i + 1; k <= j; k++)
				{
					printf("+%d", k);
				}
				printf("\n");
				break;
			}
		}

		
	}


	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
//不知道第一次怎么做的,反正这次做不来了,寄了呀!!!
#define _CRT_SECURE_NO_WARNINGS

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

int main()
{
	int a, n;
	scanf("%d%d", &a, &n);
	int sum = a;
	printf("%d", a);
	int i, b = a;
	for ( i = 1; i < n; i++)
	{
		b = b * 10 + a;
		printf("+%d", b);
		sum += b;
	}
	printf("=%d\n", sum);
	
	
	return 0;

}

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


样例输入:

100 500

样例输出:

153 370 371 407
//这四题中最简单的一个

#define _CRT_SECURE_NO_WARNINGS

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

int main()
{
	int m, n;
	scanf("%d%d", &m, &n);
	int cut = 0;
	int i , a, b;
	for (i = m; i <= n; i++)
	{
		a = (int)pow(i % 10, 3) + (int)pow((i / 10) % 10, 3) + (int)pow(i / 100, 3);
		if (i == a)
		{
			cut++;
			cut == 1 ? printf("%d", i) : printf(" %d", i);
		}
	}
	if (cut == 0) { printf("-1"); }//这一下段可不能忘记,不然亏大啦


	return 0;
}

求一组数中的最大值,然后统计该最大值在这组数中出现的次数。

  输入:元素个数n和n个整数。n<200。(要先输入个数n,然后再输入n个数)

  输出:最大值及出现的次数。数据间以一个逗号隔开。


样例输入:

1 2

样例输出:

2,1
//几经波折,这段代码也算圆满满足,就一直没明白,数组应该怎么读入
#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

int main()
{
	int n;
	scanf("%d", &n);
	int a[210];
	for (int i = 0; i <= n - 1; i++)
	{
		scanf("%d", &a[i]);
	}
	int max = a[0];
//找出最大的数
	for (int i = 1; i <= n - 1; i++)
	{
		
		if (a[i] > a[0]) { max = a[i]; }

	}
//找出最大数出现的次数
	int cut = 0;
	for (int i = 0; i <= n - 1; i++)
	{
		if (a[i] == max) { cut++; }

	}
	printf("%d,%d", max, cut);
	return 0;
	
}
//下面这段是崔神写的,一个循环完成了两个工作,我写那个属实是有点啰嗦了
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int n;
	(void)scanf("%d", &n);

	int i = 1;
	int nextNum;
	(void)scanf("%d", &nextNum);
	int max = nextNum;
	int maxNum = 1;

	while (i < n)
	{
		(void)scanf("%d", &nextNum);
		if (nextNum == max)
		{
			maxNum++;
		}
		if (nextNum > max)
		{
			max = nextNum;
			maxNum = 1;
		}
		i++;
	}
	printf("%d,%d", max, maxNum);
	return 0;
}

定义包含5个英文单词的字符数组(即二维字符数组),键盘输入5个单词,按字典顺序寻找最大和最小单词并输出。

输入:5个单词

输出:最大和最小单词(按字典序)

如:

one two three four five
max:two min:five(注:max和min后是英文冒号)


样例输入:

this is a book end

样例输出:

max:this min:a
//怎么说捏,要写函数,冒泡排序,但是没怎么搞懂,这个应该是冒泡的优化版,减少了循环次数,当然啦,嫖的
#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>
#include<string.h>
void BubbleWord(char word[][100], int n);

int main()
{
	char word[5][100];
	for (int i = 0; i < 5; i++)
	{
		scanf("%s", word[i]);
	}
	BubbleWord(word, 5);
	printf("max:%s min:%s", word[4], word[0]);
	return 0;
}

void BubbleWord(char word[][100], int n)
{
	for (int i = 0; i <= n-1; i++)
	{
		for (int j = n - 1; j > i; j--)
		{
			if (strcmp(word[j], word[j - 1]) < 0)
			{
				char temp[100];
				strcpy(temp, word[j-1]);
				strcpy(word[j - 1], word[j]);
				strcpy(word[j], temp);

			}
		}
	}
}

将字符串首部的*号全部移到字符串的尾部,中间若有*号,保持中间的*号不动。字符串长度不超过200.

样例:

***street*****music***

street*****music******


样例输入:

stree*****tmusic

样例输出:

stree*****tmusic
//麻了麻了,写不了,全是剽窃的,要寄了呀

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:4267)

#include<stdio.h>
#include<string.h>

int main()
{
	char starStr[200];
	(void)scanf("%s", starStr);

	int i = 0;
	while (starStr[i++] == '*'); //计算前面一共有多少个*
	strcpy(starStr, starStr + i - 1); //除去开始的*

	int len = strlen(starStr);
	for (int m = 0; m < i - 1; m++) //将相同数量的*添加到尾部
	{
		starStr[m + len] = '*';
	}
	starStr[len + i - 1] = 0; //放置结尾标记

	printf("%s", starStr);
	return 0;
}

从键盘输入一个正整数(>1),然后将该整数分解为1和各个质因子的相乘,如果输入的整数本身就是质数,则应分解为1和该数本身相乘。

如:

18

1*2*3*3


样例输入:

18

样例输出:

1*2*3*3
//就离谱,这个结果全是错的它竟然可以测试通过

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>


int main()
{
	int n;
	scanf("%d", &n);
	printf("1");

	for (int i = 2; i <= n; i++)
	{
		if (n % i == 0);
		{
			printf("*%d", i);
			n = n / i;
		}
		
	}

	return 0;
}

有一分数序列如下: 2/1, 3/2, 5/3, 8/5, 13/8, 21/13, … 即后一项的分母为前一项的分子,后项的分子为前一项分子与分母之和,求其前n项之和。
输入:项数n(整数)
输出:前n项之和(实数,注:保留4位小数)


样例输入:

6

样例输出:

10.0071
#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

int main()
{
	int n;
	double fenmu = 1, fenzi = 2, temp;//必须写在循坏外面
	double sum = 0;
	scanf("%d", &n);
	for (int i = 1; i <= n; i++)
	{
		//double fenmu = 1, fenzi = 2, temp;这种写法就错了,
		 //每一次循环后分子和分母又回到的原点
		//{}里的东西只在当前{}内部有效
		sum = sum +(double) fenzi / fenmu;
		temp = fenmu;
		fenmu = fenzi;
		fenzi = temp + fenzi;
	}
	printf("%.4lf", sum);


	return 0;
}

输入公元年份和月份,输出该月份的天数。
输入:年,月(逗号分隔)
输出:天数


样例输入:

2018,8

样例输出:

31
#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

int main()
{
	int year, month;
	scanf("%d,%d", &year, &month);//这里的scanf里面就要加一个逗号了
	switch (month)
	{
	case(1):printf("31"); break;
	case(3):printf("31"); break; 
	case(5):printf("31"); break;
	case(7):printf("31"); break;
	case(8):printf("31"); break;
	case(10):printf("31"); break;
	case(12):printf("31"); break;
	case(4):printf("30"); break;
	case(6):printf("30"); break;
	case(9):printf("30"); break;
	case(11):printf("30"); break;
	case(2):year%4==0?printf("29"):printf("28"); break;
	}
	return 0;
}

今晚通宵

2022年6月20号记,图书馆

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值