`
qingtangpaomian
  • 浏览: 37803 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

USACO - 1.2.5 - Dual Palindromes

 
阅读更多

转载请注明出处

摘要:模拟,回文数 ,进制转换

一. 题目翻译

1. 描述:

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

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

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

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

2. 格式:

          PROGRAM NAME:dualpal

          INPUT FORMAT:

          (file dualpal.in)

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

          OUTPUT FORMAT:

          (file dualpal.out)

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

3. SAMPLE:
          SAMPLE INPUT:
          3 25
          SAMPLE OUTPUT:
          26
          27
          28          
                    
二.  题解
1. 题意理解(将问题分析清楚,大致用什么思路):
          类似于上一道题目,题目的核心考查的点还是回文数 。由于题目数据很小,从s开始枚举,判断就可以了。

2. 具体实现(具体实现过程中出现的问题):
          参考代码注释。

3. 启示
           和1.2.4的题目很相似,可以一起积累。

三.  代码
/*
ID:fightin1
LANG:JAVA
TASK:dualpal
*/
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.Scanner;

public class dualpal {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			Scanner in = new Scanner(new BufferedReader(new FileReader("dualpal.in")));
			PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("dualpal.out")));
			int times = in.nextInt(); // 题目中的N
			int start = in.nextInt(); // 题目中的S
			
			int cnt1 = 0; //用来记录 当前已经发现的满足条件的数,如果cnt1大于times时,则可以停止程序了。
			for (int i=start+1;cnt1<times;i++){
				int cnt2 = 0; //用来判断当前数支持多少种进制的回文数
				for (int j=2;j<=10;j++){
					if (isP(transfer(i, j))){
						cnt2++;
						if(cnt2==2){ //等于两种的时候就可以停止循环了,满足条件。cnt1++
							cnt1++;
							pw.println(i);
							break;
						}
					}
				}
			}
			pw.close();
			in.close();
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	/**
	 * 进制转化
	 */
	public static String transfer (int num , int base) {
		String result = "";
		while (num!=0){
			result = num%base + result;
			num = num/base;
		}
		return result ;
	}
	/**
	 *判断是否是回文数 
	 */
	public static boolean isP(String num){
		for (int i=0;i<num.length()/2;i++){
			if (num.charAt(i)!=num.charAt(num.length()-1-i)){
				return false;
			}
		}
		return true;
	}
	
}
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics