问题 E: 零基础学C/C++184——吉祥数
可以利用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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现