NOIP初赛试题分类汇总_完善程序部分.docVIP

  • 8
  • 0
  • 约1.61万字
  • 约 20页
  • 2020-03-23 发布于广东
  • 举报
PAGE 1 NOIP初赛试题汇总 完善程序 2004 1.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(0 k 14)。 输出: 使得最先出列的k个人都是坏人的m的最小值。 输入样例: 4 输出样例: 30 程序: #include stdio.h long k, m, begin; int check(long remain){ long result = ( ① ) % remain; if ( ② ){ begin = result; return 1; } else return 0; } int main(){ long i, find = 0; scanf(%ld, k); for (m = k; ③ ; m++){ find = 1; begin = 0; for (i = 0; i k; i++) if (!check( ④ )){ find = 0; break; } } printf(%ld\n, ⑤ ); return 0; } 2.逻辑游戏 题目描述: 一个同学给了我一个逻辑游戏。他给了我图1,在这个图上,每一段边界都已经进行了编号。我的任务是在图中画一条连续的曲线,使得这条曲线穿过每一个边界一次且仅穿过一次,而且曲线的起点和终点都在这整个区域的外面。这条曲线是容许自交的。 对于图1,我的同学告诉我画出这样的一条曲线(图2)是不可能的,但是对于有的图形(比如图3),画出这样一条曲线是可行的。对于给定的一个图,我想知道是否可以画出满足要求的曲线。 图1 图2 图3 图4 输入: 输入的图形用一个n×n的矩阵表示的。矩阵的每一个单元里有一个0到255之间(包括0和255)的整数。处于同一个区域的单元里的数相同,相邻区域的数不同(但是不相邻的区域里的数可能相同)。 输入的第一行是n(0n100)。以下的n行每行包括n个整数,分别给出对应的单元里的整数(这n个整数之间用空格分开)。图4给出了输入样例对应的图形。 输出: 当可以画出满足题意的曲线的时候,输出“YES”;否则,输出“NO”。 输入样例: 3 1 1 2 1 2 2 1 1 2 输出样例: YES 程序: #include stdio.h #include math.h int orig, n, ns, a[102][102], bun; int d[]={1, 0, -1, 0, 0, 1, ① }; void plimba(int x, int y){ int i, x1, y1; a[x][y] = -a[x][y]; if (abs(a[x - 1][y]) != orig ( ② != a[x - 1][y] || abs(a[x][y - 1]) != orig)) ns++; if (abs(a[x + 1][y]) != orig (a[x + 1][y - 1] != a[x + 1][y] || abs(a[x][y - 1]) != orig)) ns++; if (abs(a[x][y - 1]) != orig ( ③ != a[x][y - 1] || abs(a[x - 1][y]) != orig)) ns++; if (abs(a[x][y + 1]) != orig (a[x - 1][y + 1] != a[x][y + 1] || 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); } } int main(){ int i, 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)

1亿VIP精品文档

相关文档