欢迎来到天天文库
浏览记录
ID:54698139
大小:555.50 KB
页数:20页
时间:2020-04-19
《NOIP初赛试题分类汇总_完善程序部分.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、NOIP初赛试题汇总完善程序'20041.Joseph题目描述:原始的Joseph问题的描述如下:有n个人围坐在一个圆桌周围,把这n个人依次编号为1,…,n。从编号是1的人开始报数,数到第m个人出列,然后从出列的下一个人重新开始报数,数到第m个人又出列,…,如此反复直到所有的人全部出列为止。比如当n=6,m=5的时候,出列的顺序依次是5,4,6,2,3,1。现在的问题是:假设有k个好人和k个坏人。好人的编号的1到k,坏人的编号是k+1到2k。我们希望求出m的最小值,使得最先出列的k个人都是坏人。输入:仅有的一个数字是k(02、个人都是坏人的m的最小值。输入样例:4输出样例:30程序:#includelongk,m,begin;intcheck(longremain){longresult=(①)%remain;if(②){begin=result;return1;}elsereturn0;}intmain(){longi,find=0;scanf("%ld",&k);for(m=k;③;m++){find=1;begin=0;for(i=0;i3、rn0;}2.逻辑游戏题目描述:一个同学给了我一个逻辑游戏。他给了我图1,在这个图上,每一段边界都已经进行了编号。我的任务是在图中画一条连续的曲线,使得这条曲线穿过每一个边界一次且仅穿过一次,而且曲线的起点和终点都在这整个区域的外面。这条曲线是容许自交的。对于图1,我的同学告诉我画出这样的一条曲线(图2)是不可能的,但是对于有的图形(比如图3),画出这样一条曲线是可行的。对于给定的一个图,我想知道是否可以画出满足要求的曲线。图1图2图3图4输入:输入的图形用一个n×n的矩阵表示的。矩阵的每一个单元里有一个0到255之间(包括0和255)的整数。处于同一个区域4、的单元里的数相同,相邻区域的数不同(但是不相邻的区域里的数可能相同)。输入的第一行是n(0#includeintorig,n,ns,a[102][102],bun;intd[]={1,0,-1,0,0,1,①};voidplimba(intx,inty)5、{inti,x1,y1;a[x][y]=-a[x][y];if(abs(a[x-1][y])!=orig&&(②!=a[x-1][y]6、7、abs(a[x][y-1])!=orig))ns++;if(abs(a[x+1][y])!=orig&&(a[x+1][y-1]!=a[x+1][y]8、9、abs(a[x][y-1])!=orig))ns++;if(abs(a[x][y-1])!=orig&&(③!=a[x][y-1]10、11、abs(a[x-1][y])!=orig))ns++;if(abs(a[x][y+1])!=orig&&(a[x-1][y+1]!=a[x12、][y+1]13、14、abs(a[x-1][y])!=orig))ns++;for(i=0;i<4;i++){x1=x+d[2*i];y1=y+④;if(x1>=1&&x1<=n&&y1>=1&&y1<=n&&⑤)plimba(x1,y1);}}intmain(){inti,j;bun=1;scanf("%d",&n);for(i=0;i<=n+1;i++)for(j=0;j<=n+1;j++)a[i][j]=0;a[0][0]=-1;a[n+1][0]=-1;a[0][n+1]=-1;a[n+1][n+1]=-1;for(i=1;i<=n;i++)for(j=115、;j<=n;j++)scanf("%d",&(a[i][j]));for(i=1;i<=n;i++)for(j=1;j<=n;j++){if(a[i][j]>-1){ns=0;⑥;plimba(i,j);if(ns%2==1)bun=0;}20}if(bun)printf("YES");elseprintf("NO");return0;}'20051.木材加工题目描述:木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木头(木头有可能有剩余),需要得到的小段的数目是给定了的。当然,我们希望得到的小段越长越好,你的任务是计算能够得到的小段木头的16、最大长度。木头长度的单位是cm。原木的长度都是正整数
2、个人都是坏人的m的最小值。输入样例:4输出样例:30程序:#includelongk,m,begin;intcheck(longremain){longresult=(①)%remain;if(②){begin=result;return1;}elsereturn0;}intmain(){longi,find=0;scanf("%ld",&k);for(m=k;③;m++){find=1;begin=0;for(i=0;i3、rn0;}2.逻辑游戏题目描述:一个同学给了我一个逻辑游戏。他给了我图1,在这个图上,每一段边界都已经进行了编号。我的任务是在图中画一条连续的曲线,使得这条曲线穿过每一个边界一次且仅穿过一次,而且曲线的起点和终点都在这整个区域的外面。这条曲线是容许自交的。对于图1,我的同学告诉我画出这样的一条曲线(图2)是不可能的,但是对于有的图形(比如图3),画出这样一条曲线是可行的。对于给定的一个图,我想知道是否可以画出满足要求的曲线。图1图2图3图4输入:输入的图形用一个n×n的矩阵表示的。矩阵的每一个单元里有一个0到255之间(包括0和255)的整数。处于同一个区域4、的单元里的数相同,相邻区域的数不同(但是不相邻的区域里的数可能相同)。输入的第一行是n(0#includeintorig,n,ns,a[102][102],bun;intd[]={1,0,-1,0,0,1,①};voidplimba(intx,inty)5、{inti,x1,y1;a[x][y]=-a[x][y];if(abs(a[x-1][y])!=orig&&(②!=a[x-1][y]6、7、abs(a[x][y-1])!=orig))ns++;if(abs(a[x+1][y])!=orig&&(a[x+1][y-1]!=a[x+1][y]8、9、abs(a[x][y-1])!=orig))ns++;if(abs(a[x][y-1])!=orig&&(③!=a[x][y-1]10、11、abs(a[x-1][y])!=orig))ns++;if(abs(a[x][y+1])!=orig&&(a[x-1][y+1]!=a[x12、][y+1]13、14、abs(a[x-1][y])!=orig))ns++;for(i=0;i<4;i++){x1=x+d[2*i];y1=y+④;if(x1>=1&&x1<=n&&y1>=1&&y1<=n&&⑤)plimba(x1,y1);}}intmain(){inti,j;bun=1;scanf("%d",&n);for(i=0;i<=n+1;i++)for(j=0;j<=n+1;j++)a[i][j]=0;a[0][0]=-1;a[n+1][0]=-1;a[0][n+1]=-1;a[n+1][n+1]=-1;for(i=1;i<=n;i++)for(j=115、;j<=n;j++)scanf("%d",&(a[i][j]));for(i=1;i<=n;i++)for(j=1;j<=n;j++){if(a[i][j]>-1){ns=0;⑥;plimba(i,j);if(ns%2==1)bun=0;}20}if(bun)printf("YES");elseprintf("NO");return0;}'20051.木材加工题目描述:木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木头(木头有可能有剩余),需要得到的小段的数目是给定了的。当然,我们希望得到的小段越长越好,你的任务是计算能够得到的小段木头的16、最大长度。木头长度的单位是cm。原木的长度都是正整数
3、rn0;}2.逻辑游戏题目描述:一个同学给了我一个逻辑游戏。他给了我图1,在这个图上,每一段边界都已经进行了编号。我的任务是在图中画一条连续的曲线,使得这条曲线穿过每一个边界一次且仅穿过一次,而且曲线的起点和终点都在这整个区域的外面。这条曲线是容许自交的。对于图1,我的同学告诉我画出这样的一条曲线(图2)是不可能的,但是对于有的图形(比如图3),画出这样一条曲线是可行的。对于给定的一个图,我想知道是否可以画出满足要求的曲线。图1图2图3图4输入:输入的图形用一个n×n的矩阵表示的。矩阵的每一个单元里有一个0到255之间(包括0和255)的整数。处于同一个区域
4、的单元里的数相同,相邻区域的数不同(但是不相邻的区域里的数可能相同)。输入的第一行是n(0#includeintorig,n,ns,a[102][102],bun;intd[]={1,0,-1,0,0,1,①};voidplimba(intx,inty)
5、{inti,x1,y1;a[x][y]=-a[x][y];if(abs(a[x-1][y])!=orig&&(②!=a[x-1][y]
6、
7、abs(a[x][y-1])!=orig))ns++;if(abs(a[x+1][y])!=orig&&(a[x+1][y-1]!=a[x+1][y]
8、
9、abs(a[x][y-1])!=orig))ns++;if(abs(a[x][y-1])!=orig&&(③!=a[x][y-1]
10、
11、abs(a[x-1][y])!=orig))ns++;if(abs(a[x][y+1])!=orig&&(a[x-1][y+1]!=a[x
12、][y+1]
13、
14、abs(a[x-1][y])!=orig))ns++;for(i=0;i<4;i++){x1=x+d[2*i];y1=y+④;if(x1>=1&&x1<=n&&y1>=1&&y1<=n&&⑤)plimba(x1,y1);}}intmain(){inti,j;bun=1;scanf("%d",&n);for(i=0;i<=n+1;i++)for(j=0;j<=n+1;j++)a[i][j]=0;a[0][0]=-1;a[n+1][0]=-1;a[0][n+1]=-1;a[n+1][n+1]=-1;for(i=1;i<=n;i++)for(j=1
15、;j<=n;j++)scanf("%d",&(a[i][j]));for(i=1;i<=n;i++)for(j=1;j<=n;j++){if(a[i][j]>-1){ns=0;⑥;plimba(i,j);if(ns%2==1)bun=0;}20}if(bun)printf("YES");elseprintf("NO");return0;}'20051.木材加工题目描述:木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木头(木头有可能有剩余),需要得到的小段的数目是给定了的。当然,我们希望得到的小段越长越好,你的任务是计算能够得到的小段木头的
16、最大长度。木头长度的单位是cm。原木的长度都是正整数
此文档下载收益归作者所有