这道题可以用数组记录每一个完美数组(以及他的序号)
也可以给出序号后用循环算出他的值(不用数组)
用数组的优势是在访问量大是可以有效减少程序运行时间(等于是一次把活干完,之后你要一个我给一个)
不用数组的优势是可以减小内存的使用(类似于你要一个东西,我马上去造好了给你)
解析直接写在代码注释里了
不用数组的解法
#include <stdio.h>
int main()
{
int T,find;
int k;
while (~scanf("%d", &T))//有输入时执行循环体内的语句
{
for (int i = 1; i <= T; i++)//读入t组数据
{
scanf("%d", &k);
int count = 1;
for (int j = 19; count <= k; j=j+9)//第一个完美数字时19,所以从19开始寻找完美数字(当然从1开始也可以)
{
int boss = j;//boss存入j的值进行之后的位数和计算
int sum = 0;
while (boss != //boss=0时结束位数和计算
{
sum = sum + boss % 10;//取个位的值
boss = boss / 10;
}
if (sum == 10)//满足完美数字的定义
{
count++;
find = j;
}
}
printf("%d\n", find);
}
}
return 0;
}
用数组的解法(我的解法)
#include<iostream>
using namespace std;
int nx[10005];
int main(){
//10000
int cnt=0;
for(int i=0;cnt<=10005;i++){//将所有完美数字按序号存入数组(因为我从0开始存储,所以可以看到在最后一行输出时,我输出的是数组中a-1的值
int n=i;
int sum=0;
while(n>0){
sum+=n%10;
n/=10;
}
if(sum==10){
nx[cnt++]=i;
}
}
int t;
cin >> t;;
for(int i=1;i<=t;i++){
int a;
cin >> a;
cout << nx[a-1] << endl;
}
}

京公网安备 11010502036488号