【USACO 1.2.5】双重回文数

【题目描述】


如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做“回文数”。例如,12321就是一个回文数,而77778就不是。当然,回文数的首和尾都应是非零的,因此0220就不是回文数。

事实上,有一些数(如21),在十进制时不是回文数,但在其它进制(如二进制时为10101)时就是回文数。

编一个程序,从文件读入两个十进制数N (1 <= N <= 15)S (0 < S <
10000)然后找出前N个满足大于S且在两种或两种以上进制(二进制至十进制)上是回文数的十进制数,输出到文件上。

本问题的解决方案不需要使用大于32位的整型

【格式】

INPUT FORMAT:

(file dualpal.in)

只有一行,用空格隔开的两个数N和S。

OUTPUT FORMAT:

(file dualpal.out)

N行, 每行一个满足上述要求的数,并按从小到大的顺序输出.

【分析】

这道题教会了我写函数模板的重要性......


 1 #include <cstdlib>
2 #include <iostream>
3 #include <cstdio>
4 #include <cmath>
5 #include <cstring>
6 const int maxl=100000;
7 using namespace std;
8 int shu_1[maxl],shu_2[maxl];
9 int temp[maxl];
10 //进制转换
11 void change(int *shu,int num,int system);
12 bool check(int *shu);//检查是否是回文数
13 int main()
14 {
15 int n,i,s,cnt=0;
16
17 //文件操作
18 freopen("dualpal.in","r",stdin);
19 freopen("dualpal.out","w",stdout);
20 scanf("%d%d",&n,&s);
21
22 for (i=s+1;;i++)
23 {
24 if (cnt==n) break;
25 int lj=0;
26 for (int j=2;j<=10;j++)
27 {
28 change(shu_1,i,j);
29 if (check(shu_1)) lj++;
30 }
31 if (lj>=2) {printf("%d\n",i);cnt++;}
32 }
33 return 0;
34 }
35 //把一个num转换成system进制的数
36 void change(int *shu,int num,int system)
37 {
38 int point=0;
39 memset(shu,0,sizeof(shu));
40 memset(temp,0,sizeof(temp));
41 point++;
42 //进制转换
43 while (num!=0)
44 {
45 int t;
46 t=num%system;
47 num=num/system;
48 temp[point++]=t;
49 }
50 point--;
51 for (int i=point;i>=1;i--) shu[point-i+1]=temp[i];
52 shu[0]=point;//长度
53 return;
54 }
55 bool check(int *shu)
56 {
57 int point=shu[0],i;
58 for (i=1;i<=(point/2)+1;i++)
59 if (shu[i]!=shu[point-i+1]) return 0;
60 return 1;
61 }

时间: 2025-01-14 10:51:48

【USACO 1.2.5】双重回文数的相关文章

洛谷P1207 [USACO1.2]双重回文数 Dual Palindromes

P1207 [USACO1.2]双重回文数 Dual Palindromes 291通过 462提交 题目提供者该用户不存在 标签USACO 难度普及- 提交  讨论  题解 最新讨论 暂时没有讨论 题目描述 如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做“回文数”.例如,12321就是一个回文数,而77778就不是.当然,回文数的首和尾都应是非零的,因此0220就不是回文数. 事实上,有一些数(如21),在十进制时不是回文数,但在其它进制(如二进制时为10101)时就是回文数. 编

洛谷 P1207 [USACO1.2]双重回文数 Dual Palindromes

题目描述 如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做"回文数".例如,12321就是一个回文数,而77778就不是.当然,回文数的首和尾都应是非零的,因此0220就不是回文数. 事实上,有一些数(如21),在十进制时不是回文数,但在其它进制(如二进制时为10101)时就是回文数. 编一个程序,从文件读入两个十进制数N (1 <= N <= 15)S (0 < S < 10000)然后找出前N个满足大于S且在两种或两种以上进制(二进制至十进制)上是

【USACO 1.2.4】回文平方数

[题目描述] 回文数是指从左向右念和从右向左念都一样的数.如12321就是一个典型的回文数. 给定一个进制B(2<=B<=20,由十进制表示),输出所有的大于等于1小于等于300(十进制下)且它的平方用B进制表示时是回文数的数.用'A','B'--表示10,11等等. [格式] INPUT FORMAT: file (palsquare.in) 共一行,一个单独的整数B(B用十进制表示). OUTPUT FORMAT: file (palsquare.out) 每行两个B进制的符合要求的数字,

【USACO 1.5.1】回文质数

[题目描述] 因为151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数. 写一个程序来找出范围[a,b](5 <= a < b <= 100,000,000)( 一亿)间的所有回文质数; [格式] INPUT FORMAT: (file pprime.in) 第 1 行: 二个整数 a 和 b . OUTPUT FORMAT: (file pprime.out) 输出一个回文质数的列表,一行一个. [分析] 晕,交了3遍才过.(不要鄙视我了==) 先

判断一个数是否为回文数

#include <stdio.h> int is_palindromic(int num) {  char _old = num;  char _new = 0;  while (num)  {   _new = _new * 10 + (num % 10);   num = num / 10;  }  if (_new == _old)  {   return 1;  }  else  {   return 0;  } } int main() {  int num = 0;  scanf

LeetCode 9 Palindrome Number (回文数)

翻译 确定一个整数是否是回文数.不能使用额外的空间. 一些提示: 负数能不能是回文数呢?(比如,-1) 如果你想将整数转换成字符串,但要注意限制使用额外的空间. 你也可以考虑翻转一个整数. 然而,如果你已经解决了问题"翻转整数(译者注:LeetCode 第七题), 那么你应该知道翻转的整数可能会造成溢出. 你将如何处理这种情况? 这是一个解决该问题更通用的方法. 原文 Determine whether an integer is a palindrome. Do this without ex

要求循环输入一个数,判断是否为回文数

import java.util.Scanner; public class HuiWenShu { public static void main(String[] args) { Scanner input = new Scanner(System.in); char c = 'y'; //初始化c为y,为下面的循环做好准备 while(c == 'y'){ while(c == 'y'){ System.out.println("请随意输入一个大于三位的奇位数"); //回文数属

回文数 第N个回文数

判断回文数还是不难,如果能转为字符串就更简单了. 如果是求第N个回文数呢. 12321是一个回文数,这里先考虑一半的情况. 回文数的个数其实是有规律的.如: 1位回文数: 9个 2位回文数: 9个 3位回文数: 90个 4位回文数: 90个 5位回文数: 900个 6位回文数: 900个 … 我们看到9.90.900,是不是很有规律,那是什么原因?很简单,我们把回文数拆开两半 [123321]来看.两半的变化一样的,那我们只算其中一半就行了.首位不能是0,所以左半最小为 100,最大为999,共

Palindrome Number (回文数)

回文数是指这样的数字:正读和倒读都是一样的.如:595,2332都是回文数,234不是回文数. 注意:负数不是回文数 Determine whether an integer is a palindrome. Do this without extra space. Some hints: Could negative integers be palindromes? (ie, -1) If you are thinking of converting the integer to string