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个节 ...
随机推荐
- (三)log4j常用配置
控制台(console) log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = ...
- Android使用OkHttp实现登录注册功能
客户端 在客户端,这里将登录和注册放在了同一个界面,在账号和密码两个EditText中输入内容后,按下LOGIN按钮,进行登录:按下REGISTER按钮,进行注册. 在写代码之前,先添加OkHttp的 ...
- ESP8266局域网 路由器下作服务器模式串口透传 arduino uno示例 模板参考2
ESP8266服务器模式串口透传编译需要下载8266的库文件后才可以正常 准备工作 下载一个Arduino IDE,下载8266的库文件ESP8266服务器模式串口透传编译 功能说明 1.直接使用路由 ...
- VScode快捷键集锦(持续更新)
本文的快捷键是根据VScode for mac来的,Windows和Linux用户可能需要些许改动. 注释:cmd + / 注释当前选中的行,或者注释掉选中的行,再按一次反注释.还可以在按cmd + ...
- VS Code WebApi系列——1、配置
Knowledge should be Shared in Free. 最近在研究VS code下的webapi,看了很多文档,还是微软官方的例子好,不过不太适应国人习惯,所以写点东西. 直接了当 开 ...
- cb34a_c++_STL_算法_查找算法_(7)_lower_bound
cb34a_c++_STL_算法_查找算法_(7)_lower_bound//针对已序区间的查找算法,如set,multiset关联容器-自动排序lower_bound()--第一个可能的位置uppe ...
- 一个简单的 react 实例: < TodoList >
< react TodoList: > 组件: //引入React : import React from 'react'; //组件 class TodoList exten ...
- vue基础入门(4)
4.综合实例 4.1.基于数据驱动的选项卡 4.1.1.需求 需求说明: 1. 被选中的选项按钮颜色成橙色 2. 完成被选中选项下的数据列表渲染 3. 完成选项切换 4.1.2.代码实现 <!D ...
- 019.Kubernetes二进制集群存储longhorn
一 Longhorn存储部署 1.1 Longhorn概述 Longhorn是用于Kubernetes的开源分布式块存储系统. 提示:更多介绍参考:https://github.com/longhor ...
- Java多线程之synchronized详解
目录 synchronized简介 同步的原理 对象头与锁的实现 锁的优化与升级 Monitor Record 锁的对比 synchronized简介 synchronized关键字,一般称之为&qu ...