最长的循环节

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1035

因为结果要么是有限小数要么是无限循环小数,那么只要模拟这个过程,然后判断循环就跳出,记录循环次数就好。

 1 #include <iostream>
 2 #include <string.h>
 3 #include <stdio.h>
 4 #include <map>
 5 using namespace std;
 6 int vis[1001],a[1001];
 7 int main()
 8 {
 9     //freopen("a.txt","r",stdin);
10     int x,y,z,k;
11     for(int i=1;i<=1000;i++)
12     {
13         memset(vis,0,sizeof(vis));
14         x=1,z=0,k=1;
15         while(1)
16         {
17             y=x%i;
18             x=x/i;
19             if(y==0||vis[y]) break;
20             vis[y]=1;
21             x=(k-x*i)*10;
22             k=x;
23             z++;
24             //printf("%d\n",x);
25         }
26         if(vis[y]) a[i]=z;
27         else a[i]=0;
28        // printf("%d\n",a[i]);
29     }
30     int n,j=1,ans=0;
31     scanf("%d",&n);
32     for(int i=1;i<=n;i++)
33     {
34         if(a[i]>ans)
35         {
36             ans=a[i];
37             j=i;
38         }
39     }
40     printf("%d\n",j);
41     return 0;
42 }
时间: 2024-10-25 13:12:49

最长的循环节的相关文章

51Nod - 1035 最长的循环节

51Nod - 1035 最长的循环节 正整数k的倒数1/k,写为10进制的小数如果为无限循环小数,则存在一个循环节,求<=n的数中,倒数循环节长度最长的那个数,假如存在多个最优的答案,输出所有答案中最大的那个数. 1/6= 0.1(6) 循环节长度为1 1/7= 0.(142857) 循环节长度为6 1/9= 0.(1)  循环节长度为1 Input 输入n(10 <= n <= 1000) Output 输出<=n的数中倒数循环节长度最长的那个数 Input示例 10 Outp

1035 最长的循环节

1035 最长的循环节 基准时间限制:1 秒 空间限制:131072 KB 正整数k的倒数1/k,写为10进制的小数如果为无限循环小数,则存在一个循环节,求<=n的数中,倒数循环节长度最长的那个数. 1/6= 0.1(6) 循环节长度为1 1/7= 0.(142857) 循环节长度为6 1/9= 0.(1)  循环节长度为1 Input 输入n(10 <= n <= 1000) Output 输出<=n的数中倒数循环节长度最长的那个数 Input示例 10 Output示例 7思路

51nod 1035:最长的循环节

1035 最长的循环节 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 正整数k的倒数1/k,写为10进制的小数如果为无限循环小数,则存在一个循环节,求<=n的数中,倒数循环节长度最长的那个数. 1/6= 0.1(6) 循环节长度为1 1/7= 0.(142857) 循环节长度为6 1/9= 0.(1)  循环节长度为1 Input 输入n(10 <= n <= 1000) Output 输出<=n的数中倒数循环节长度最长的那个数 Input示例

51Node 1035----最长的循环节

51Node  1035----最长的循环节 正整数k的倒数1/k,写为10进制的小数如果为无限循环小数,则存在一个循环节,求<=n的数中,倒数循环节长度最长的那个数. 1/6= 0.1(6) 循环节长度为1 1/7= 0.(142857) 循环节长度为6 1/9= 0.(1)  循环节长度为1 Input 输入n(10 <= n <= 1000) Output 输出<=n的数中倒数循环节长度最长的那个数 Input示例 10 Output示例 7 代码如下: #include &

KMP的妙用(利用next数组寻找字符串的循环节)

利用KMP的next数组的性质,我们可以找到next数组的循环节. 先说结论: 设字符串长n,则若其  i % ( i – next[n] ) == 0 ,则其有循环节(循环节数目大于1),其循环节数目为 i / ( i – next[n] ) 这里的next数组存储的是匹配到i匹配不成立时,下一个要匹配的位置.即next数组记录的是下一次匹配的位置,而不是下一次匹配的偏移量,若是记录的偏移量,只需修改一下公式即可. 言归正传,我们先证明第一个结论,根据下图来进行说明: 若结论中的关系成立(整除

循环节

循环节 题目描述 第一节是英语课.今天,老师又教了桐桐很多单词.桐桐发现所有单词都有循环节(大写字母一律化成小写字母).如a(循环长度为1,循环节为a),luLul(循环长度为2,循环节为lu),OlyMPic(循环长度为7,循环节为olympic),CcCcccc(循环长度为1,循环节为c),等等. 而且,桐桐发现这能加速她背单词.她上课和ROBIN说了话,老师罚她背单词.虽然就一个,但长度实在太大,单词大小写可以不管,求桐桐需要记多长的最小循环节,并把这个单词的最小循环节输出来(最后一个循环

HDU - 4333 Revolving Digits(拓展kmp+最小循环节)

1.给一个数字字符串s,可以把它的最后一个字符放到最前面变为另一个数字,直到又变为原来的s.求这个过程中比原来的数字小的.相等的.大的数字各有多少. 例如:字符串123,变换过程:123 -> 312 -> 231 -> 123 因为:312>123, 231>123, 123=123 所以答案是:0 1 2 2.令str1=s,str2=s+s,然后str1作为子串,str2作为主串,进行扩展kmp求出str2[i...len2-1]与str1[0...len1-1]的最长

HDU 3746 Cyclic Nacklace 环形项链(KMP,循环节)

题意:给一个字符串,问:要补多少个字符才能让其出现循环?比如abc要补3个变成abcabc.若已经循环,输出0. 思路:KMP的next数组解决.如果已经出现循环,那么答案为0.但是不循环呢?要根据next[len]来断定.我们要用最少字符来补上使其循环,而我们所知的就是要令循环节为k=len-next[len]这么长,即串开头的这么长.补到串长为k的倍数为止,此时,k就是循环节了. 其实答案可以直接算的,我用个循环来找而已.直接算应该是len%k后剩下末尾那小串的长度,补k-len%k这么多个

循环节(BFS)

循环节 时间限制: 1 Sec  内存限制: 64 MB提交: 56  解决: 16[提交][状态][讨论版] 题目描述 第一节是英语课.今天,老师又教了桐桐很多单词.桐桐发现所有单词都有循环节(大写字母一律化成小写字母).如a(循环长度为1,循环节为 a),luLul(循环长度为2,循环节为lu),OlyMPic(循环长度为7,循环节为olympic),CcCcccc(循环长度为1,循环节为 c),等等. 而且,桐桐发现这能加速她背单词.她上课和ROBIN说了话,老师罚她背单词.虽然就一个,但