首页 > 编程语言 >问题 E: 零基础学C/C++184——吉祥数

问题 E: 零基础学C/C++184——吉祥数

时间:2022-11-10 08:33:29浏览次数:61  
标签:cishu 184 检查 int C++ 数组 淘汰 吉祥


可以利用cishu数组来记录每个数字是否被淘汰。
本题的关键就是再算出如题的数组b的时候向a数组检查是,不能因为第一个数被淘汰而不算他的吉祥数,应在一轮计算结束的时候遍历要淘汰的数字,故cishu数组可以等于一,在检查结束后再将其加一。

点击查看代码
/*本题的关键就是再算出如题的数组b的时候向a数组检查是,不能
因为第一个数被淘汰而将其算出的吉祥数淘汰
应在一轮结束后在淘汰,故cishu数组可以等于一,
在检查结束后再将其加一*/
#include<stdio.h>
#include<algorithm>//sort头文件
using namespace std;//使用命名空间(c++函数要写的哦)
int pow(int a, int b)
{
	int i, c = 1;
	for (i = 1; i <= b; i++)
	{
		c = c * a;
	}
	return c;
}
int main()
{
	int n, i, a[250],b[250], c = 0, ge, shi, bai, j, k = 2, cishu[250] = { 0 }, m, zhi, max = 0,x,y;
	scanf("%d", &n);
	while (scanf("%d", &a[c]) != EOF)
	{
		c++;
	}
	sort(a, a + c);//可以先利用sort函数排序
	for (i = 1; i <= n; i++)
	{
		for (j = 0; j < c; j++)
		{
			ge = a[j] % 10;
			shi = a[j] / 10 % 10;
			bai = a[j] / 100;
			b[j] = pow(ge, k) + pow(shi, k) + pow(bai, k);//算出该数的吉祥数
		}
		for (m = 0; m < c; m++)
		{
			if (cishu[m] == 1 || cishu[m] == 0)//记住 次数可以等与1,因为要在所有吉祥数都算出来之后在进行第一轮的淘汰
			{
				for (x = 0; x < c; x++)
				{
					if (a[m] == b[x] && (cishu[x] == 0||cishu[x]==1))
					{
						cishu[m]++;
					}
				}
			}
		}
		for (x = 0; x < c; x++)
		{
			if (cishu[x] == 1)
			{
				cishu[x]++;//cishu等于一的下标应该被淘汰
			}
		}
		k++;//次幂数加一
	}
	for (i = 0; i < c; i++)
	{
		if (cishu[i] == 0)//c次循环后剩余的数就是所求的数
		{
			printf("%d ", a[i]);
		}
	}
	return 0;
}


标签:cishu,184,检查,int,C++,数组,淘汰,吉祥
From: https://www.cnblogs.com/myy-zzb/p/16875844.html

相关文章