今天做了这样一道题:
思路:由于我还很垃圾没有什么很灵活的思路所以我是先打算写两个函数分别判断三角数和回文数,然后在解这道题
判断三角数:
int sanjiao(int n)
{
int i=1;
int sum=0;
int x=0;
while(sum<=n)
{
sum=i*(i+1)/2;
if(n==sum)
{
x=1;
break;
}
i++;
}
return x;
}
判断回文数:我一开始的想法是把这个数倒置成另外一个数然后再和原来的数比较大小,但是这个过程好像比较麻烦而且也没有必要,所以我就想到用数组来存,然后用循环来比较数组的首尾。定义数组需要长度所以我打算先把这个数有多少位先算出来。
int huiwen(int n)
{
int temp1=n;
int temp2=n;
int len=1;
int y=1;
while(1)
{
if(temp1/10==0)
{
break;
}
temp1/=10;
len++;
}
int sum=0;
int arr[len];
for(int i=0;i<len;i++)
{
arr[i]=temp2%10;
temp2/=10;
}
for(int i=0;i<len;i++)
{
if(arr[i]!=arr[len-1-i])
{
y=0;
}
}
return y;
}
好了,现在判断三角数和回文数的函数都写好了,来解决这道题。
一开始我做了一件很愚蠢的事情!如下:
int n=20220514;
while(1)
{
n++;
int re1=sanjiao(n);
int re2=huiwen(n);
if(re1&&re2)
{
cout<<n<<endl;
break;
}
}
我点击运行。。于是进入了漫长的等待。。。。(真的很愚蠢。。)完全没有必要每个数都去判断。
感觉回文数比三角数更难遇,所以可以先判断这个数是不是回文数,如果是再判断是不是三角数,如果一开始就判断出不是回文数的话完全就没有继续判断的必要了。
int n=20220514;
while(1)
{
n++;
int re2=huiwen(n);
if(re2)
{
int re1=sanjiao(n);
if(re1)
{
cout<<n<<"就是这个数"<<endl;
break;
}
}
}
最终结果是35133153
虽然是很简单的一个问题,但是从看到题目到解决问题我花了一个多小时qaq.....还是得多加练习!