秃头的直上


私信TA

用户名:TTDZS

访问量:2636

签 名:

等  级
排  名 16560
经  验 800
参赛次数 0
文章发表 10
年  龄 0
在职情况 学生
学  校 桂林电子科技大学
专  业

  自我简介:

解题思路:
就暴力硬解

没有采用for(int i=0;i<10000;i++)的形式因为这样太费时了,可能会超时

而是往第一个和最后一个填一样的数字,第二个和倒数第二个填一样的数字........再判断各个位数相加是否为n。这样只用采用三次for循环就可以算出题解

注意事项:
在填第一个数字的时候,第一个数字不可以为0。

其他位数的数字可以
参考代码:


#include<iostream>
#include<string>
using namespace  std;

//定义全局数组,这样可以让它们的每一个元素的初始值为0 
int five[5];  //存放五位回文数字
int six[6];   //存放六位回文数字 

int main()
{
	int n;
	cin>>n;//要满足的数位和
	int sign=1;
	
	for(int a=1;a<10;a++) //5位回文数字		
	{
		five[0]=a;
		five[4]=a;
		for(int b=0;b<10;b++)
		{
			five[1]=b;
			five[3]=b;
			for(int c=0;c<10;c++)
			{
				five[2]=c;
				if(five[0]+five[1]+five[2]+five[3]+five[4]==n)
				{
					cout<<five[0]<<five[1]<<five[2]<<five[3]<<five[4]<<endl;
					sign=0;
				}
			}
		}
	} 
	
	for(int a=1;a<10;a++) //5位回文数字		
	{
		six[0]=a;
		six[5]=a;
		for(int b=0;b<10;b++)
		{
			six[1]=b;
			six[4]=b;
			for(int c=0;c<10;c++)
			{
				six[2]=c;
				six[3]=c;
				if(six[0]+six[1]+six[2]+six[3]+six[4]+six[5]==n)
				{
					cout<<six[0]<<six[1]<<six[2]<<six[3]<<six[4]<<six[5]<<endl;
					sign=0;
				}
			}
		}
	}

	
	if(sign)
	cout<<-1<<endl;
	
	
	return 0;
 }
 

0.0分

0 人评分

  评论区

  • «
  • »