nbsp; {
num1=i*i*i;
num2=i*i*i*i;
for (k=0;k<=9;k++) a[k]=0;
while(num1!=0)
{
if(a[num1%10]==0)
{
a[num1%10]=1;
num1=num1/10;
}
else
break;
}
while(num2!=0){
if(a[num2%10]==0){
a[num2%10]=1;
num2=num2/10;
}
else
break;
}
if(num1==0 && num2==0)
cout<<i<<endl;
}
return 0;
}
【例4】珠心算测验
珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及。
某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。他随机生成一个元素个数不超过100个的正整数集合,集合中的数的大小不超过1000,且各不相同,然后要求学生回答:其中有多少个数,恰好等于集合中另外两个(不同的)数之和?
例如,对于集合{1,2,3,4,5},输出应为3。因为3=1+2、4=2+2=1+3、5=1+4=2+3,共3个数。
(1)编程思路。
定义一个数组int flag[2001]用于记录和的出现情况。初始时元素值全为0。
将集合中每两个不同的数穷举相加求和,再将这个和打上标记。例如,若数a与数b相加等于数c,则置flag[c]=1。
之后,扫描所有集合中的数x,统计所有被打上标记的数(即flag[x]==1)的数量。
(2)源程序及运行结果。
#include <iostream>
using namespace std;
int main()
{
int n,i,j,x,a[101],flag[2001]={0},cnt;
cout<<"请输入拟产生集合中数据元素的个数:";
&nbs