POJ 1047 Round and Round We Go 最详细的解题报告
解题思路:用程序实现一个乘法功能,将给定的字符串依次做旋转,然后进行比较。由于题目比较简单,所以不做过多的详解。
具体算法(java版,可以直接AC)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String line;
while (scanner.hasNext()) {
line = scanner.next();
MyNumber number = new MyNumber(line);
int count = 0;
for (int i = 2; i <= line.length(); i++) {
NumNode[] result = number.multiply(i);
if (number.isCycle(result)) {
count++;
}
}
if (count == line.length()-1) {
System.out.println(line + " is cyclic");
} else {
System.out.println(line + " is not cyclic");
}
}
}
}
class NumNode {
int value;
int carry;
public NumNode() {
this.value = 0;
this.carry = 0;
} }
class MyNumber {
private NumNode[] data;
private int length;
private String[] rotation;
private boolean isRotated;
public MyNumber(String line) {
this.length = line.length();
this.isRotated=false;
this.data = new NumNode[this.length];
this.rotation = new String[this.length];
for (int i = this.length - 1; i >= 0; i--) {
this.data[i] = new NumNode();
this.data[i].value = line.charAt(i) - '0';
}
}
private void rotate() {
for (int i = 0; i < this.length; i++) {
StringBuffer buffer = new StringBuffer();
for (int j = i; j < this.length; j++) {
buffer.append(this.data[j].value);
}
for (int j = 0; j < i; j++) {
buffer.append(this.data[j].value);
}
this.rotation[i] = buffer.toString();
}
}
public NumNode[] multiply(int a) {
NumNode[] result = new NumNode[this.length];
for (int i = this.length - 1; i >= 0; i--) {
int value = this.data[i].value * a;
result[i] = new NumNode();
if (i + 1 < this.length) {
value += result[i + 1].carry;
}
result[i].value = value % 10;
result[i].carry = value / 10;
}
return result;
}
public boolean equals(String s) {
for (String str : this.rotation) {
if (str.equals(s))
return true;
}
return false;
}
public boolean isCycle(NumNode[] num) {
if (num[0].carry > 0)
return false;
if(!this.isRotated){
this.rotate();
this.isRotated=true;
}
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < num.length; i++) {
buffer.append(num[i].value);
}
return this.equals(buffer.toString());
}
public String toString() {
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < this.length; i++) {
buffer.append(this.data[i].value);
}
return buffer.toString();
}
}
POJ 1047 Round and Round We Go 最详细的解题报告的更多相关文章
- CH Round #55 - Streaming #6 (NOIP模拟赛day2)解题报告
T1九九归一 描述 萌蛋在练习模n意义下的乘法时发现,总有一些数,在自乘若干次以后,会变成1.例如n=7,那么5×5 mod 7=4,4×5 mod 7=6,6×5 mod 7=2,2×5 mod 7 ...
- CH Round #54 - Streaming #5 (NOIP模拟赛Day1)解题报告
最近参加了很多CH上的比赛呢~Rating--了..题目各种跪烂.各种膜拜大神OTZZZ T1珠 描述 萌蛋有n颗珠子,每一颗珠子都写有一个数字.萌蛋把它们用线串成了环.我们称一个数字串是有趣的,当且 ...
- Valentine's Day Round 1001.Ferries Wheel(hdu 5174)解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5174 题目意思:给出 n 个人坐的缆车值,假设有 k 个缆车,缆车值 A[i] 需要满足:A[i−1] ...
- Codeforces Round #256 (Div. 2/A)/Codeforces448A_Rewards(水题)解题报告
对于这道水题本人觉得应该应用贪心算法来解这道题: 下面就贴出本人的代码吧: #include<cstdio> #include<iostream> using namespac ...
- POJ 1046 Color Me Less 最详细的解题报告
题目来源:POJ 1046 Color Me Less 题目大意:每一个颜色由R.G.B三部分组成,D=Math.sqrt(Math.pow((left.red - right.red), 2)+ M ...
- POJ 1057 File Mapping 最详细的解题报告
题目来源:POJ 1057 File Mapping 题目大意:像我的电脑那样显示文件夹和文件信息,其中在同一级目录内,文件夹排在文件的前面并且文件夹的顺序不变,同一级目录中文件按字母序排列.文件以‘ ...
- POJ 1063 Flip and Shift 最详细的解题报告
题目来源:Flip and Shift 题目大意:一个椭圆形的环形容器中有黑色和白色两种盘子,问你是否可以将黑色的盘子连续的放在一起.你可以有以下两种操作: 1.顺时针旋转所有的盘子 2.顺时针旋转3 ...
- POJ 1050 To the Max 最详细的解题报告
题目来源:To the Max 题目大意:给定一个N*N的矩阵,求该矩阵中的某一个矩形,该矩形内各元素之和最大,即最大子矩阵问题. 解题方法:最大子序列之和的扩展 解题步骤: 1.定义一个N*N的矩阵 ...
- POJ 1095 Trees Made to Order 最详细的解题报告
题目来源:Trees Made to Order 题目大意:根据下面的规则给一棵二叉树编号: 规则1:如果二叉树为空,则编号为0: 规则2:如果二叉树只有一个节点,则编号为1: 规则3:所有含有m个节 ...
随机推荐
- Express4.x之中间件与路由详解及源码分析
Application.use() Application.router() express核心源码模拟 一.express.use() 1.1app.use([path,] callback [, ...
- 2019-02-07 selenium...
今天是超级郁闷的一天 看教程 下了mysql-----配置-----不会----查资料------2小时后 mongodb-----配置------不会------查资料------1小时后 然后是各 ...
- Python爬虫小白入门(七)爬取豆瓣音乐top250
抓取目标: 豆瓣音乐top250的歌名.作者(专辑).评分和歌曲链接 使用工具: requests + lxml + xpath. 我认为这种工具组合是最适合初学者的,requests比pytho ...
- loadrunner常见问题及解决办法
LoadRunner录制脚本时不弹出IE浏览器解决方法:启动浏览器,打开Internet选项对话框,切换到高级标签,去掉"启用第三方浏览器扩展(需要重启动)"的勾选,然后再次运行V ...
- linux安装mysql使用yum安装
安装MySQL 安装mysql客户端: yum install mysql 安装mysql 服务器端: yum install mysql-server 至此我就可以使用Yum简单地管理MySQL更新 ...
- 动力节点 mysql 郭鑫 34道经典的面试题二
13.有3个表S(学生表),C(课程表),SC(学生选课表) S(SNO,SNAME)代表(学号,姓名) C(CNO,CNAME,CTEACHER)代表(课号,课名,教师) SC(SNO,CNO,SC ...
- 【JAVA8新的时间与日期 API】- 传统时间格式化的线程安全问题
Java8之前的日期和时间API,存在一些问题,最重要的就是线程安全的问题.这些问题都在Java8中的日期和时间API中得到了解决,而且Java8中的日期和时间API更加强大. 传统时间格式化的线程安 ...
- Redis系列(六):数据结构List双向链表LPUSH、LPOP、RPUSH、RPOP、LLEN命令
1.介绍 redis中的list既实现了栈(先进后出)又实现了队列(先进先出) 1.示意图 2.各命令详解 LPUSH/RPUSH LPUSH: 从队列的左边入队一个或多个元素 将所有指定的值插入到存 ...
- 入门大数据---Sqoop简介与安装
一.Sqoop 简介 Sqoop 是一个常用的数据迁移工具,主要用于在不同存储系统之间实现数据的导入与导出: 导入数据:从 MySQL,Oracle 等关系型数据库中导入数据到 HDFS.Hive.H ...
- Python实用笔记 (17)模块
一个abc.py的文件就是一个名字叫abc的模块,一个xyz.py的文件就是一个名字叫xyz的模块. 现在,假设我们的abc和xyz这两个模块名字与其他模块冲突了,于是我们可以通过包来组织模块,避免冲 ...