咖啡


私信TA

用户名:Tianxn

访问量:128018

签 名:

十年OI一场空,不开LL见祖宗。

等  级
排  名 8
经  验 26033
参赛次数 10
文章发表 197
年  龄 22
在职情况 学生
学  校 西安电子科技大学
专  业 软件工程

  自我简介:

解题思路:刚来这个网站不久,看了前辈们写的题解,感觉有点沉长,题目种说5位数和6位数的,并且从小到大;我直接按顺序遍历10000到1000000(不包括)之间的数,把么一个数就求其回文和给位数字之和来判断时候复合要求;判断回文:数组也可以做到,但是在本题种使用本人的做法可以简单的将判断回文和求个位数字之和一起方便求得;比如给出1221:1221%10=1 ->1221/10=122 -> 1*10+122%10=12 ->122/10=12 

->12*10+12%10=122 -> 12/10=1 -> 122*10+1%10=1221  得到1221与原来给出得相等;

在举个反例:123:123%10=3 -> 123/10=12 -> 3*10+12%10=32 -> 12/10=1 ->32*10+1%10=321;

                            123 != 321  故不是回文数;

求个位数字之和只用在求回文得时候 每次取余得到得数累加求和即可。

(刚开始使用这个,格式什么的还不会设置,望理解,谢谢)

注意事项:在判断回文的时候,记得用一个临时变量代替正在遍历的数,不然会影响遍历顺序,导致程序出错。

参考代码:

#include <stdio.h>
int main(void)
{
	int n, flag = 1;
	scanf("%d", &n);
	for(int i = 10000; i < 1000000; ++i)
	{
		int t = i, num = 0, sum = 0;
		while(t>0)
		{
			num = num*10 + t%10;
			sum += t%10;
			t /= 10;
		}
		if(num==i && sum==n)
		{
			flag = 0;
			printf("%d\n", i);
		}
	}
	if(flag)
	{
		printf("-1\n");
	}
	
	return 0;
}


 

0.0分

118 人评分

  评论区

为什么我这样写超时了
2022-12-26 11:56:16
大佬啊,太六了
2022-11-10 07:52:04
这个计算式没看懂啊大佬们,谁给写个好看点的呗
2022-08-14 19:24:17
嗯厉害
2022-03-26 21:33:01
求解不知道是少考虑了哪种情况,一直是答案不对
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
	int n,i,j,k,s=0;//各位数字之和,5-6位数
	cin>>n;
	//5位数
	for(i=1;i<10;i++)
	{
		for(j=1;j<10;j++)
			{
				for(k=1;k<10;k++)
				{
					if(i*2+j*2+k==n)
					{
						s+=i*2+j*2+k;
						cout<<i<<j<<k<<j<<i<<"\n";
					}
				}
		    }
	}
	//6位数
	for(i=1;i<10;i++)
	{
		for(j=1;j<10;j++)
			{
				for(k=1;k<10;k++)
				{
					if(i*2+j*2+2*k==n)
					{
						s+=i*2+j*2+2*k;
						cout<<i<<j<<k<<k<<j<<i<<"\n";
					}
				}
		    }
	}
	//筛选出=-1的情况
	if(s==0)
	{
		cout<<-1;
	}
}
2022-03-19 23:11:10
比如给出1221:1221%10=1 ->1221/10=122 -> 1*10+122%10=12 ->122/10=12 

->12*10+12%10=122 -> 12/10=1 -> 122*10+1%10=1221  得到1221与原来给出得相等;  不懂
2022-03-01 15:35:14
牛逼六六六
2022-02-23 11:18:41
我只能说牛逼
2021-11-25 15:14:28