`
Simone_chou
  • 浏览: 195822 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

iDual Palindromes(枚举)

 
阅读更多

 

 

Dual Palindromes
Mario Cruz (Colombia) & Hugo Rickeboer (Argentina)

A number that reads the same from right to left as when read from left to right is called a palindrome. The number 12321 is a palindrome; the number 77778 is not. Of course, palindromes have neither leading nor trailing zeroes, so 0220 is not a palindrome.

The number 21 (base 10) is not palindrome in base 10, but the number 21 (base 10) is, in fact, a palindrome in base 2 (10101).

Write a program that reads two numbers (expressed in base 10):

  • N (1 <= N <= 15)
  • S (0 < S < 10000)

and then finds and prints (in base 10) the first N numbers strictly greater than S that are palindromic when written in two or more number bases (2 <= base <= 10).

Solutions to this problem do not require manipulating integers larger than the standard 32 bits.

PROGRAM NAME: dualpal

INPUT FORMAT

A single line with space separated integers N and S.

SAMPLE INPUT (file dualpal.in)

3 25

OUTPUT FORMAT

N lines, each with a base 10 number that is palindromic when expressed in at least two of the bases 2..10. The numbers should be listed in order from smallest to largest.

SAMPLE OUTPUT (file dualpal.out)

26
27
28

 

   题意:

   在S数的基础上找出最先的N个十进制的数(十进制输出),这些数至少有两种或者两种以上进制(范围是二进制到十进制)为回文串。

 

   思路:

   这题与上一题类似,只是循环的东西不一样。同样的用把转换进制的功能封装在一个函数中,另外把判断是否为回文串的功能封装在另一个函数中。通过循环进制(2到10)来积累一个数有多少个进制为回文串,如果找到两个则跳出循环。用sum来表示已经找到两种或两种以上进制数的数量,当sum积累到N时,跳出总的循环(总的循环包括S不断自增1)。

 

   Wrong and test:

 

#include<stdio.h>
#include<string.h>
//#include<stdlib.h>
int change[20];
int S,length,number;
//转换进制函数
int c(int i)
{
	memset(change,0,sizeof(change));
	int j=0;
	while(number)
	{
	   change[j++]=number%i;
	   number/=i;
	}
//备注释的时候不小心把下面这句也注释掉了
//最后导致输出的结果很不一样	
        length=j;
//每一步输出查看,看是否有正确存储到change中
//	for(i=length-1;i>=0;i--)  
//	 printf("%d",change[i]);
//	 printf("\n");
//	system("pause");
}
//测试是否为回文串的函数
int test()
{
	int i,j;
	for(i=0,j=length-1;i<length;i++,j--)
	 if(change[i]!=change[j]) return 0;
	return 1;
}

int main()
{
	int N,i,time=0,temp;
	scanf("%d%d",&N,&S);
	while(1)
	{
	 S++;
	 temp=0;
	 for(i=2;i<=10;i++)
	  { 
		number=S;  
                c[i];
//刚开始错在上面这两句话写的顺序反了
//如果调反的话,则number为被赋值就开始将number转换进制
//那实际change[20]为'\0'(通过上面测试发现这里有错误)
		if(test())   temp++;
//一开始读错题了,是要两个或者两个以上才输出
		if(temp>=2)
		{
			printf("%d\n",S);
			time++;
			break;
		}
	  }
	  if(time==N)  break; 
      //time累计到N则跳出总循环
    }
	return 0;
}

   AC:

/*
TASK:dualpal
LANG:C
ID:sum-g1
*/
#include<stdio.h>
#include<string.h>
int change[20];
int S,length,number;
int c(int i)
{
	int j=0;
	while(number)
	{
	   change[j++]=number%i;
	   number/=i;
	}
	length=j;
}
int test()
{
	int i,j;
	for(i=0,j=length-1;i<length;i++,j--)
	 if(change[i]!=change[j]) return 0;
	return 1;
}
int main()
{
FILE *fin =fopen("dualpal.in","r");
 FILE *fout=fopen("dualpal.out","w");	
int N,i,time=0,temp;
	fscanf(fin,"%d%d",&N,&S);
	while(1)
	{
	 S++;
         temp=0;
	 for(i=2;i<=10;i++)
	  { 
		number=S;  
//必须赋值给number才对数进行取余和用除法处理尾数
//如果直接在S上进行这些操作,则改变了S本身,而最后又要输出S
//所以如果不赋值给number的话最后输出的数会全都是0
		c(i);
		if(test())  temp++;
//看temp积累到两个没有
 		if(temp==2)
 		 {fprintf(fout,"%d\n",S);time++;break;}
//time是用来积累已经找到几个满足条件的数
	  }
	  if(time==N)  break;
    }
	return 0;
}

   总结:

   技巧的东西,从上一题就学到了。但是还是出现了很多粗心的地方,不过现在也不会找那么久的错误了,可能犯的次数多了,大概也能知道自己会错在哪里。有时候写完代码而且AC了这道题后,看下别人写的代码,也是一种学习的过程,或许能学到更多技巧的地方。

分享到:
评论

相关推荐

    USACO题目Dual Palindromes (dualpal)及代码解析

    Dual Palindromes(dualpal)这道题目尤为有趣,它考察参赛者对回文数的理解、多进制表示的掌握以及C语言文件输入输出的处理能力,还考验算法设计的创新和效率。 首先,让我们来探讨回文数的概念。所谓回文数,就是...

    python-4.双重回文数 Dual Palindromes-两种进制哦.py

    python-4.双重回文数 Dual Palindromes——两种进制哦.py

    UVaOJ-401(Palindromes).zip_401 Palindromes

    标题中的"UVaOJ-401(Palindromes)"表明这是一个关于解决UVa Online Judge(UVa OJ)上编号为401的编程挑战,该挑战的主题是"Palindromes",即回文串。回文串是指一个字符串无论从前读到后还是从后读到前都是相同的,...

    zoj 1325 Palindromes.md

    zoj 1325 Palindromes.md

    USACO官网93题fps格式 OJ题库

    9 [1.2] 双重回文数 Dual Palindromes 10 [1.3] 混合牛奶 Mixing Milk 11 [1.3] 修理牛棚 Barn Repair 12 [1.3] 牛式 Prime Cryptarithm 13 [1.3] 虫洞 wormhole 14 [1.3] 滑雪课程设计Ski Course Design

    暴力枚举[10.19-10.22].pdf

    在提高篇中,题目[P1217 "USACO1.5"]回文质数 Prime Palindromes 和[P1149 "NOIP2008 提高组"]火柴棒等式虽然难度增加,但也仍然可以使用暴力枚举作为基础算法,结合其他优化技术来解决。 总的来说,暴力枚举虽然...

    poj 3376 Finding Palindromes.md

    poj 3376 Finding Palindromes.md

    P1217 USACO1.5 回文质数 Prime Palindromes

    P1217 [USACO1.5] 回文质数 Prime Palindromes

    第1章总结1

    接着,1.2节重点是完整搜索,如"Milking Cows"中运用离散化技术,"Transformations"和"Name That Number"通过枚举解决,而"Palindromic Squares"和"Dual Palindromes"进一步强化了枚举法的应用。 1.3节围绕贪心算法...

    -palindromes-源码.rar

    标题中的“-palindromes-源码.rar”暗示了这个压缩包可能包含了一组与回文相关的编程源代码。回文是指一个可以正读也可反读的字符串,例如“madam”、“racecar”或者数字“12321”。在编程中,处理回文的算法通常...

    烟花代码编程python满屏-8.回文质数 Prime Palindromes-单身,还对称,这是水仙?.py

    烟花代码编程python满屏-8.回文质数 Prime Palindromes——单身,还对称,这是水仙?.py

    回文数算法

    palindromes.Add(i); } } return palindromes; } ``` 然后,我们需要找到给定数字前后最近的回文数。这可以通过在生成的回文数列表中搜索最接近给定数字的回文数来实现。这里有一个简单的实现方法: ```csharp...

    palindromes:992015年的课堂项目

    在网络浏览器中打开palindromes.html 使用的技术 使用HTML和JavaScript创建 合法的 版权所有(c)2015 Chris Swan和Phillip Shannon 该软件已获得MIT许可。 特此免费授予获得此软件和相关文档文件(“软件”)副本...

    USACO英汉对照题目

    1.2.4 "Palindromic Squares" 和 "Dual Palindromes" 强调了对回文数的理解和生成算法。 1.3.1 "Mixing Milk" 和 "Barn Repair" 可能涉及到更复杂的数学模型和动态规划。 1.4.1 "Packing Rectangles" 可能需要理解二...

    CIS-241-Palindromes

    CIS 241回文 CIS 241中的作业4(第2部分)中的第2个 到期日: 2020年10月23日 程序说明: 回文是指向前和向后以相同方式拼写的字符串。 回文症的一些例子是:“雷达”,“可能是我看到的厄尔巴岛”,以及,如果您...

    Palindromes:简单的回文解析应用程序,给出了前三个最大的回文

    6. **文件I/O**:程序需要读取输入文本文件,这可能使用了Java的FileInputStream或BufferedReader类。 7. **排序算法**:找到的回文可能需要按长度降序排列,这可能涉及到快速排序、归并排序或Java的Collections....

    USACO.zip_usaco

    8. **1.2.5 Dual Palindromes**:双回文问题可能需要检查字符串是否既是正读也是反读的回文,涉及到字符串处理和回文判断算法。 9. **4.1.2 Fence Rails**:这可能是一个关于排列组合的问题,需要计算在特定条件下...

    USACO全部题目

    #### Dual Palindromes 这个问题进一步扩展了回文的概念,要求找出同时在两种进制下都是回文数的整数。解决此类问题时,可以采用类似的方法,但需要额外考虑不同进制下的转换。 #### Mixing Milk 这是一道关于...

    -palindromes:js中的基本回文程序

    该项目是多年迭代开发和综合社区知识的产物。 它没有强加特定的开发哲学或框架,因此您可以按照自己的方式自由地构建代码。 主页: : 资料来源: : 推特: 快速开始 选择以下选项之一: ...

    USACO全部译题

    **1.2.5 Dual Palindromes** - **问题描述**:题目要求寻找同时是两个不同进制下的回文数。 - **算法思想**:可以采用枚举法,结合快速幂运算进行进制转换和回文检查。 ##### 第二部分:进阶级题目解析 **2.1.1 ...

Global site tag (gtag.js) - Google Analytics