NOIP2005普及组 循环

2024-01-30 21:58
文章标签 普及 循环 noip2005

本文主要是介绍NOIP2005普及组 循环,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

A1154. 循环
时间限制: 1.0s   内存限制: 256.0MB  
总提交次数: 221   AC次数: 40   平均分: 32.71
将本题分享到:
 
       
     
查看未格式化的试题    提交    试题讨论
试题来源
NOIP2005 普及组
问题描述
乐乐是一个聪明而又勤奋好学的孩子。他总喜欢探求事物的规律。一天,他突然对数的正整数次幂产生了兴趣。
  众所周知,2的正整数次幂最后一位数总是不断的在重复2,4,8,6,2,4,8,6……我们说2的正整数次幂最后一位的循环长度是4(实际上4的倍数都可以说是循环长度,但我们只考虑最小的循环长度)。类似的,其余的数字的正整数次幂最后一位数也有类似的循环现象:
数字
循环
循环长度
2
2、4、8、6
4
3
3、9、7、1
4
4
4、6
2
5
5
1
6
6
1
7
7、9、3、1
4
8
8、4、2、6
4
9
9、1
2
  这时乐乐的问题就出来了:是不是只有最后一位才有这样的循环呢?对于一个整数n的正整数次幂来说,它的后k位是否会发生循环?如果循环的话,循环长度是多少呢?
  注意:
  1. 如果n的某个正整数次幂的位数不足k,那么不足的高位看做是0。
  2. 如果循环长度是L,那么说明对于任意的正整数a,n的a次幂和a + L次幂的最后k位都相同。
输入格式
只有一行,包含两个整数n(1 <= n < 10 100)和k(1 <= k <= 100),n和k之间用一个空格隔开,表示要求n的正整数次幂的最后k位的循环长度。
输出格式
t包括一行,这一行只包含一个整数,表示循环长度。如果循环不存在,输出-1。
样例输入
32 2
样例输出
4
数据规模和约定
对于30%的数据,k <= 4;
  对于全部的数据,k <= 100。


解析:我直接举一个例子进行说明吧:111 3(由于1的循环长度就是1,所以我直接从末两位循环开始)

          我们来看111的末两位循环:

          111  -> 321 -> 631 -> 041 -> 551 -> 161 -> 871 -> 681 -> 591 -> 601 -> 711 

          711处末两位出现循环,循环长度为10,循环节为11-> ...-> 01

          现在我们再来看末三位循环:

          111->...->601 (10个数)

          711->...->201 (201就是601^2的末三位)

          311->...->801 (801就是601^3的末三位)

          911->...->401 (401就是601^4的末三位)

          511->...->001 (001就是601^5的末三位)

          111->...->601 (601就是601^6的末三位)  

          末三位的循环长度就是5*10=50;


          好了,现在来讲具体的做法,并假设我们现在求数字n的后k位循环。

          朴素的做法就是直接求n^2,n^3,n^4.。。。,并判断是否出现循环。但观察上面的演示例子,我们发现可以不必这样,以n=111为例,末两位循环节长度为10,即表示n与(n^10)*n的末两位是相同的。对于末三位的循环,肯定是(m*n^10),即m*(n^10)与n^10的末三位是相同的,m*(n^10)*n的末三位与n相同。 于是,计算末三位循环的时候,我们就直接将n^10作为第一个数,然后每次乘n^10,共乘5次,末三位出现循环,即m=5,所以末三位循环街长度就为5*10=50。

        

代码:(代码与原作者不同 思想一样 建议点开链接参考下原作程序)

<pre style="margin-top: 0px; margin-bottom: 0px; word-wrap: break-word; word-break: break-all; font-family: "YaHei Consolas Hybrid", Consolas, "Lucida Console", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace, 宋体; color: rgb(51, 51, 51); font-size: 14px; background-color: rgba(255, 255, 255, 0.298039);"><code style="margin: 0px; word-wrap: break-word; word-break: break-all; font-family: "YaHei Consolas Hybrid", Consolas, "Lucida Console", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace, 宋体;"><span class="hljs-preprocessor" style="color: rgb(153, 153, 153); font-weight: bold;">#<span class="hljs-keyword" style="color: rgb(51, 51, 51);">include</span> <cstdio></span>
<span class="hljs-preprocessor" style="color: rgb(153, 153, 153); font-weight: bold;">#<span class="hljs-keyword" style="color: rgb(51, 51, 51);">include</span> <cstring></span>
<span class="hljs-preprocessor" style="color: rgb(153, 153, 153); font-weight: bold;">#<span class="hljs-keyword" style="color: rgb(51, 51, 51);">include</span> <iostream></span><span class="hljs-keyword" style="font-weight: bold;">using</span> <span class="hljs-keyword" style="font-weight: bold;">namespace</span> <span class="hljs-built_in" style="color: rgb(0, 134, 179);">std</span>;<span class="hljs-keyword" style="font-weight: bold;">const</span> <span class="hljs-keyword" style="font-weight: bold;">int</span> Maxn=<span class="hljs-number" style="color: rgb(0, 128, 128);">110</span>;<span class="hljs-keyword" style="font-weight: bold;">int</span> i,l,a[Maxn],now[Maxn],ans[Maxn],last[Maxn],temp[Maxn];
<span class="hljs-keyword" style="font-weight: bold;">char</span> s[Maxn];<span class="hljs-keyword" style="font-weight: bold;">bool</span> judge(){<span class="hljs-keyword" style="font-weight: bold;">for</span>(<span class="hljs-keyword" style="font-weight: bold;">int</span> k=<span class="hljs-number" style="color: rgb(0, 128, 128);">1</span>;k<=i;k++)<span class="hljs-keyword" style="font-weight: bold;">if</span>(now[k]!=a[k])<span class="hljs-keyword" style="font-weight: bold;">return</span> <span class="hljs-number" style="color: rgb(0, 128, 128);">0</span>;<span class="hljs-keyword" style="font-weight: bold;">return</span> <span class="hljs-number" style="color: rgb(0, 128, 128);">1</span>;
}<span class="hljs-keyword" style="font-weight: bold;">void</span> mul2(<span class="hljs-keyword" style="font-weight: bold;">int</span> c)
{<span class="hljs-keyword" style="font-weight: bold;">int</span> x=<span class="hljs-number" style="color: rgb(0, 128, 128);">0</span>;<span class="hljs-keyword" style="font-weight: bold;">for</span>(<span class="hljs-keyword" style="font-weight: bold;">int</span> p=<span class="hljs-number" style="color: rgb(0, 128, 128);">1</span>;p<=ans[<span class="hljs-number" style="color: rgb(0, 128, 128);">0</span>];p++){ans[p]=ans[p]*c+x;x=ans[p]/<span class="hljs-number" style="color: rgb(0, 128, 128);">10</span>;ans[p]%=<span class="hljs-number" style="color: rgb(0, 128, 128);">10</span>;}<span class="hljs-keyword" style="font-weight: bold;">while</span>(x><span class="hljs-number" style="color: rgb(0, 128, 128);">0</span>){ans[++ans[<span class="hljs-number" style="color: rgb(0, 128, 128);">0</span>]]=x%<span class="hljs-number" style="color: rgb(0, 128, 128);">10</span>;x/=<span class="hljs-number" style="color: rgb(0, 128, 128);">10</span>;}
}<span class="hljs-keyword" style="font-weight: bold;">void</span> mul1(<span class="hljs-keyword" style="font-weight: bold;">int</span> a[],<span class="hljs-keyword" style="font-weight: bold;">int</span> b[],<span class="hljs-keyword" style="font-weight: bold;">int</span> c[])
{<span class="hljs-keyword" style="font-weight: bold;">int</span> i,k,x=<span class="hljs-number" style="color: rgb(0, 128, 128);">0</span>;c[<span class="hljs-number" style="color: rgb(0, 128, 128);">0</span>]=min(a[<span class="hljs-number" style="color: rgb(0, 128, 128);">0</span>]+b[<span class="hljs-number" style="color: rgb(0, 128, 128);">0</span>]-<span class="hljs-number" style="color: rgb(0, 128, 128);">1</span>,l);<span class="hljs-keyword" style="font-weight: bold;">for</span>(k=<span class="hljs-number" style="color: rgb(0, 128, 128);">1</span>;k<=c[<span class="hljs-number" style="color: rgb(0, 128, 128);">0</span>];k++){<span class="hljs-keyword" style="font-weight: bold;">for</span>(c[k]=x,i=<span class="hljs-number" style="color: rgb(0, 128, 128);">1</span>;i<=a[<span class="hljs-number" style="color: rgb(0, 128, 128);">0</span>];i++)<span class="hljs-keyword" style="font-weight: bold;">if</span>(k+<span class="hljs-number" style="color: rgb(0, 128, 128);">1</span>-i>=<span class="hljs-number" style="color: rgb(0, 128, 128);">1</span> && k+<span class="hljs-number" style="color: rgb(0, 128, 128);">1</span>-i<=b[<span class="hljs-number" style="color: rgb(0, 128, 128);">0</span>])c[k]+=a[i]*b[k+<span class="hljs-number" style="color: rgb(0, 128, 128);">1</span>-i];x=c[k]/<span class="hljs-number" style="color: rgb(0, 128, 128);">10</span>,c[k]%=<span class="hljs-number" style="color: rgb(0, 128, 128);">10</span>;}<span class="hljs-keyword" style="font-weight: bold;">if</span>(x)c[++c[<span class="hljs-number" style="color: rgb(0, 128, 128);">0</span>]]=x;
}<span class="hljs-keyword" style="font-weight: bold;">int</span> main()
{<span class="hljs-built_in" style="color: rgb(0, 134, 179);">scanf</span>(<span class="hljs-string" style="color: rgb(221, 17, 68);">"%s%d"</span>,s+<span class="hljs-number" style="color: rgb(0, 128, 128);">1</span>,&l);a[<span class="hljs-number" style="color: rgb(0, 128, 128);">0</span>]=<span class="hljs-built_in" style="color: rgb(0, 134, 179);">strlen</span>(s+<span class="hljs-number" style="color: rgb(0, 128, 128);">1</span>);ans[<span class="hljs-number" style="color: rgb(0, 128, 128);">1</span>]=<span class="hljs-number" style="color: rgb(0, 128, 128);">1</span>;ans[<span class="hljs-number" style="color: rgb(0, 128, 128);">0</span>]=<span class="hljs-number" style="color: rgb(0, 128, 128);">1</span>;<span class="hljs-keyword" style="font-weight: bold;">for</span>(i=<span class="hljs-number" style="color: rgb(0, 128, 128);">1</span>;i<=l;i++)a[i]=s[a[<span class="hljs-number" style="color: rgb(0, 128, 128);">0</span>]-i+<span class="hljs-number" style="color: rgb(0, 128, 128);">1</span>]-<span class="hljs-number" style="color: rgb(0, 128, 128);">48</span>;<span class="hljs-built_in" style="color: rgb(0, 134, 179);">memcpy</span>(last,a,<span class="hljs-keyword" style="font-weight: bold;">sizeof</span>(a));<span class="hljs-keyword" style="font-weight: bold;">for</span>(i=<span class="hljs-number" style="color: rgb(0, 128, 128);">1</span>;i<=l;i++){<span class="hljs-built_in" style="color: rgb(0, 134, 179);">memcpy</span>(last,a,<span class="hljs-keyword" style="font-weight: bold;">sizeof</span>(a));<span class="hljs-keyword" style="font-weight: bold;">int</span> cur=-<span class="hljs-number" style="color: rgb(0, 128, 128);">1</span>;<span class="hljs-keyword" style="font-weight: bold;">for</span>(<span class="hljs-keyword" style="font-weight: bold;">int</span> j=<span class="hljs-number" style="color: rgb(0, 128, 128);">1</span>;j<=<span class="hljs-number" style="color: rgb(0, 128, 128);">10</span>;j++){mul1(last,a,now);<span class="hljs-keyword" style="font-weight: bold;">if</span>(judge()){cur=j;<span class="hljs-keyword" style="font-weight: bold;">break</span>;}<span class="hljs-keyword" style="font-weight: bold;">else</span>{<span class="hljs-keyword" style="font-weight: bold;">for</span>(<span class="hljs-keyword" style="font-weight: bold;">int</span> p=<span class="hljs-number" style="color: rgb(0, 128, 128);">1</span>;p<=now[<span class="hljs-number" style="color: rgb(0, 128, 128);">0</span>];p++)last[p]=now[p];}}<span class="hljs-keyword" style="font-weight: bold;">if</span>(cur!=-<span class="hljs-number" style="color: rgb(0, 128, 128);">1</span>){mul2(cur);<span class="hljs-built_in" style="color: rgb(0, 134, 179);">memcpy</span>(a,last,<span class="hljs-keyword" style="font-weight: bold;">sizeof</span>(last));}<span class="hljs-keyword" style="font-weight: bold;">else</span>{<span class="hljs-built_in" style="color: rgb(0, 134, 179);">printf</span>(<span class="hljs-string" style="color: rgb(221, 17, 68);">"-1"</span>);<span class="hljs-keyword" style="font-weight: bold;">return</span> <span class="hljs-number" style="color: rgb(0, 128, 128);">0</span>;}}<span class="hljs-keyword" style="font-weight: bold;">for</span>(<span class="hljs-keyword" style="font-weight: bold;">int</span> i=ans[<span class="hljs-number" style="color: rgb(0, 128, 128);">0</span>];i>=<span class="hljs-number" style="color: rgb(0, 128, 128);">1</span>;i--)<span class="hljs-built_in" style="color: rgb(0, 134, 179);">printf</span>(<span class="hljs-string" style="color: rgb(221, 17, 68);">"%d"</span>,ans[i]);
}</code>

 转自点击打开链接
End。

这篇关于NOIP2005普及组 循环的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/661675

相关文章

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

poj3750约瑟夫环,循环队列

Description 有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序。 Input 第一行输入小孩的人数N(N<=64) 接下来每行输入一个小孩的名字(人名不超过15个字符) 最后一行输入W,S (W < N),用

校验码:奇偶校验,CRC循环冗余校验,海明校验码

文章目录 奇偶校验码CRC循环冗余校验码海明校验码 奇偶校验码 码距:任何一种编码都由许多码字构成,任意两个码字之间最少变化的二进制位数就称为数据检验码的码距。 奇偶校验码的编码方法是:由若干位有效信息(如一个字节),再加上一个二进制位(校验位)组成校验码。 奇校验:整个校验码中1的个数为奇数 偶校验:整个校验码中1的个数为偶数 奇偶校验,可检测1位(奇数位)的错误,不可纠错。

react笔记 8-17 属性绑定 class绑定 引入图片 循环遍历

1、绑定属性 constructor(){super()this.state={name:"张三",title:'我是一个title'}}render() {return (<div><div>aaaaaaa{this.state.name}<div title={this.state.title}>我是一个title</div></div></div>)} 绑定属性直接使用花括号{}   注

Spring是如何解决循环依赖?

现象解释: 在Spring框架中,循环依赖(Circular Dependency)是指两个或多个Bean之间相互依赖,形成了一个循环。例如,Bean A依赖于Bean B,而Bean B又依赖于Bean A。Spring通过多种机制解决循环依赖问题,具体来说,主要有以下几种方式: 1.三级缓存机制 Spring容器在实例化Bean时使用了三级缓存来解决循环依赖,主要涉及三个缓存结构: 一级

FPGA开发:条件语句 × 循环语句

条件语句 if_else语句 if_else语句,用来判断是否满足所给定的条件,根据判断的结果(真或假)决定执行给出的两种操作之一。 if(表达式)语句; 例如: if(a>b) out1=int1; if(表达式)         语句1; else         语句2; 例如: if(a>b)out1=int1;elseout1=int2; if(表达式1) 语句1; els

shell循环sleep while例子 条件判断

i=1# 小于5等于时候才执行while [ ${i} -le 5 ]doecho ${i}i=`expr ${i} + 1`# 休眠3秒sleep 3doneecho done 参考 http://c.biancheng.net/cpp/view/2736.html

【语音告警】博灵智能语音报警灯JavaScript循环播报场景实例-语音报警灯|声光报警器|网络信号灯

功能说明 本文将以JavaScript代码为实例,讲解如何通过JavaScript代码调用博灵语音通知终端 A4实现声光语音告警。主要博灵语音通知终端如何实现无线循环播报或者周期播报的功能。 本代码实现HTTP接口的声光语音播报,并指定循环次数、播报内容。由于通知终端采用TTS语音合成技术,所以本次案例中无需预先录制音频。 代码实战 为了通过JavaScript调用博灵语音通知终端,实现HT

【JavaScript】在循环内使用闭包

================== 基本循环语句 ==================for (var i = 0; i < 5; i++) {console.log(i);}console.log(i);//这个大家应该很快就知道了,012345================== setTimeout与var语句的for循环 ==================for (var i

笔试强训,[NOIP2002普及组]过河卒牛客.游游的水果大礼包牛客.买卖股票的最好时机(二)二叉树非递归前序遍历

目录 [NOIP2002普及组]过河卒 牛客.游游的水果大礼包 牛客.买卖股票的最好时机(二) 二叉树非递归前序遍历 [NOIP2002普及组]过河卒 题里面给的提示很有用,那个马的关系,后面就注意,dp需要作为long的类型。 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息publ