摘要: 问题: 将所有回文数从小到大排列,求第N个回文数。 一个正数如果顺着和反过来都是一样的(如13431,反过来也是13431),就称为回文数。约束: 回文数不能以0开头。 最小回文数是1。思路: 许多朋友(包括我自己)一开始就思考使用循环:从1开始,判断该数是否是回文数,然后用一个计数器记下回文数,一直到计数器得到N,返回第N个回文数。比较常用的是以下这种方法来判断是否回文数:staticbooleanisPN(intnum){into=num;inttmp=0;//使用循环把数字顺序反转while(num!=0){tmp*=10;tmp+=num%10;num/=10;}//如果原始数与反转后 阅读全文
posted @ 2013-08-03 21:34 Geekers 阅读(415) 评论(0) 推荐(0) 编辑
摘要: 这题在DFS的同时必须考虑剪枝,,给出三个别人的代码,一个耗时7秒多,一个2秒多,最后一个只有46MS,相差甚大,都是剪枝的功劳。 1 #include 2 #include 3 const int MAX =1002; 4 bool flag = false; 5 bool vist[MAX][MAX]; 6 int s,e,map[MAX][MAX]; 7 int dir[5][3]={{1,0},{0,1},{-1,0},{0,-1}}; 8 void DFS(int x,int y,int cnt,int d) 9 {10 if(cnt>2||vist[x][y]||fla... 阅读全文
posted @ 2013-08-03 11:23 Geekers 阅读(338) 评论(0) 推荐(0) 编辑