题目来源:http://poj.org/problem?id=1047

题目大意:

  有一些整数具有这样的性质:它的位数为n,把它和1到n的任意一个整数相乘结果的数字会是原数字的一个“环”。说起来比较抽象,观察一下下面的例子就明白了。将原数字首尾相接产生的环与将相乘结果的数字收尾相接产生的环是一样的。

  142857 *1 = 142857 
  142857 *2 = 285714 
  142857 *3 = 428571 
  142857 *4 = 571428 
  142857 *5 = 714285 
  142857 *6 = 857142

输入:每行一个给定的整数,前置的0不可忽略,例如01和1被视为是不同的数字。

输出:判断每个数是否符合上面的性质,是输出 n is cyclic, 否则输出 n is not cyclic.


Sample Input

142857
142856
142858
01
0588235294117647

Sample Output

142857 is cyclic
142856 is not cyclic
142858 is not cyclic
01 is not cyclic
0588235294117647 is cyclic

此题用暴力即可解决。

 //////////////////////////////////////////////////////////////////////////
// POJ1047 Round and Round We Go
// Memory: 180K Time: 0MS
// Language: C++ Result: Accepted
////////////////////////////////////////////////////////////////////////// #include <iostream>
#include <cstring> using namespace std; int n;
char num[];
char temp[]; //比较乘法结果数字是否符合要求
bool compare() {
for (int i = ; i < n; ++i) {
bool flag = true;
for (int j = ; j < n; ++j) {
if (temp[j] != num[(i + j) % n]) {
flag = false;
break;
}
}
if (flag == true) return true;
}
return false;
} int main(void) {
while (cin >> num) {
n = strlen(num);
bool flag = true; //计算大数乘法
for (int k = ; k <= n; ++k) {
memset(temp, '', sizeof(temp));
for (int i = n - ; i > ; --i) {
int s = temp[i] - '' + (num[i] - '') * k;
temp[i] = s % + '';
temp[i - ] = s / + '';
}
int s = (num[] - '') * k;
if (s / != ) {
flag = false;
break;
} else temp[] = s + temp[];
if (!compare()) {
flag = false;
break;
}
}
if (flag) cout << num << " is cyclic" << endl;
else cout << num << " is not cyclic" << endl;
}
return ;
}

不过在讨论版里看到一个人说到一种投机的方法,觉得比较有趣:

比较原数所有位之和与所得成绩所有位之和是否相等。如果不相等一定不是cyclic,如果相等,我们就“认为”它是cyclic.因为它不是循环数而又满足每次这个条件的可能性非常小,尤其是当位数比较长的时候。

虽然这种思路并不一定绝对能够得到正确的判断, 但是也给我们一些启示:有的时候如果问题难以找到直接准确的判断方法,用一些简单的排除法也许也可以帮我们找到“几乎正确”的答案。

POJ1047 Round and Round We Go的更多相关文章

  1. POJ 1047 Round and Round We Go 最详细的解题报告

    题目链接:Round and Round We Go 解题思路:用程序实现一个乘法功能,将给定的字符串依次做旋转,然后进行比较.由于题目比较简单,所以不做过多的详解. 具体算法(java版,可以直接A ...

  2. POJ 1047 Round and Round We Go

    https://vjudge.net/problem/POJ-1047 题意: 给一个整数,它的长度为n,从1开始一直到n和该整数相乘,判断每次结果是否和原来的整数是循环的. 思路: 大整数的乘法. ...

  3. Round and Round We Go

    http://acm.hdu.edu.cn/showproblem.php?pid=1313 考查大整数与小整数相乘 #include<iostream> #include<cstd ...

  4. 【HDOJ】1313 Round and Round We Go

    大数乘,果断java A了. import java.util.Scanner; import java.lang.StringBuilder; import java.math.BigInteger ...

  5. Tinkoff Challenge - Final Round (Codeforces Round #414, rated, Div. 1 + Div. 2)

    A: 思路:就是找b,c之前有多个s[i] 代码: #include<stdio.h>#define ll long longusing namespace std;ll a,b,c;in ...

  6. Educational Codeforces Round 26-D. Round Subset

    题目大意:给你n个数字(小于1e18),从n个数中取k个数字相乘,使其后缀0最多,问你后缀0最多是多少. 知道得用三维的dp[ i ] [ j ] [ k ]  第一维表示用到第 i 个数为止,j 表 ...

  7. Tinkoff Challenge - Final Round (Codeforces Round #414, rated, Div. 1 + Div. 2) 【ABC】

    老年人题解,语言python3 A - Bank Robbery 题意:给你ABC,以及n个数,问你在(B,C)之间的数有多少个. 题解:对于每个数判断一下就好了嘛 x,y,z = map(int,i ...

  8. 【构造】Tinkoff Challenge - Final Round (Codeforces Round #414, rated, Div. 1 + Div. 2) D. Labelling Cities

    考试的时候想的是,将所有的完全子图缩起来,然后如果剩下的是一条链,依次对其进行标号即可. 看了官方题解,发现完全子图这个条件太强了,缩点的条件仅仅需要保证原本两个点的“邻接表”相同即可.(注意这里的“ ...

  9. 【贪心】【multiset】Tinkoff Challenge - Final Round (Codeforces Round #414, rated, Div. 1 + Div. 2) C. Naming Company

    考虑两个人,先把各自的集合排个序,丢掉一半,因为比较劣的那一半一定用不到. 然后贪心地放,只有两种决策,要么把一个最优的放在开头,要么把一个最劣的放在结尾. 如果我的最优的比对方所有的都劣(或等于), ...

随机推荐

  1. torch7 安装中Missing dependencies for nn:moses >= 1错误解决办法

    Torch7.0安装步骤(默认安装路径是在home下): git clone https://github.com/torch/distro.git ~/torch --recursive cd ~/ ...

  2. log4net调试

    public delegate void LogReceivedEventHandler(object source, LogReceivedEventArgs e); public sealed c ...

  3. Cannot resolve class or package 'springframework' less... (Ctrl+F1) Inspection info:Spring XML mode

    其实这个问题是由于MySQL 这个jar 包依赖类型默认是runtime ,也就是说只有运行时生效,所以虽然这里报错,但是不影响你代码运行. 解决方案: 将runtime 修改为Compile 即可 ...

  4. VBS错误代码释义

    VBScript 语法错误 如果 VBScript 语句结构违反了一个或多个 VBScript 脚本语言语法规则,就会产生 VBScript 语法错误.VBScript 语法错误通常在执行程序前,编译 ...

  5. C++输入输出知识

    1.strtok将字符串中的单词用' '分割出来 #include<iostream> #include<cstdio> #include<cstdlib> #in ...

  6. 使用svnadmin对VisualSVN进行项目迁移

    使用svnadmin对VisualSVN进行项目迁移 导出1> 启动命令行cmd2> 运行%VISUALSVN_SERVER%\bin\svnadmin dump PATH-TO-REPO ...

  7. JAVA 1.5 并发之 Executor框架 (二)execute VS submit

    http://www.cnblogs.com/rockman12352/p/3788688.html 上一篇对于整体框架讲了很多东西,但是具体在使用时有一些细节并没有说出来 首先是执行任务 execu ...

  8. linux 时间处理 + 简单写log

    1s ==1000ms == 1,000,000us == 1,000,000,000 nanosecond uname -a Linux scott-Z170X 4.15.0-34-generic ...

  9. char与wchar_t数据类型

    转自:http://blog.itpub.net/27634692/viewspace-752200/ 有的人爱用strcpy等标准ANSI函数,有的人爱用_tXXXX函数,有必要把来龙去脉搞清楚. ...

  10. C#使用NPOI将DataGridView内数据写入电子表格Excel

    NPOI能够在用户没有安装office的情况下读写office文件,包括.xls/.doc/.ppt等类型的文件.本文介绍的是使用NPOI库内的函数读写Excel(.xls)内的内容.在使用NPOI之 ...