题目:
每一个参与的观众被要求将手指放在左上方的图片上(即编号为1的图片),魔术师开始了:魔术师告诉观众在图片上移动k次(移动是把手指放到上下左右相邻的图片上,如果那儿有图片的话),然后他(魔术师)的手微微一指(指向一些图片)并说:“你不在这里”,然后……是真的!你的手指没有指向任何一个被删除的图片(指向的图片)然后再来一次,他告诉观众再移动K2次……以此类推。在最后,他删除到只剩最后一个图片了,然后胜利地微笑着宣布“我抓到你了!”(掌声)。
现在,大卫准备再表演一次这个魔术。不幸的是,他这几天头疼,你知道头疼的时候变戏法有多难!所以你必须写一个程序来帮组大卫变魔术。
【输入】输入文件包含一个整数N (1< N<101).
【输出】你的程序需要像下面这样输出数字:
K1 X1,1 X1,2 … X1,m1
K2 X2,1 X2,2 … X2,m2
…
Ke Xe,1 Xe,2 … Xe,me
Ki是观众第i次移动的步数(N<=Ki<=300),所有Ki都要互补不相同(即当i<>j时,满足Ki<>Kj)Xi,1 Xi,2 … Xi,mi 是在观众进行了Ki次移动之后大卫需要删除的图片(图片数字的顺序是任意的,但是每个图片只能列出一次,并且每回至少删除一张图片)。
每一回的描述都要在一个新行里。每一行的数字都要使用一个或多个空格分隔开。循环了e次之后,只剩下一个图片没有被删除。
Sample Input
3
Sample Output
8 4 6
13 9
10 7 1
7 8
11 3 5
分析与解答:
这个题
注意specialjudge 是yes,就是说可以出现不同的答案
我一开始被样例误导了,后来明白了,这题就是移动x次,然后删除一些数,最后就剩一个数。让你给出可能的情况
那我直接
第一格移动一步,删掉左上角
到了第二格
第二个移动一步,删掉左上角2 5
到第三格
。。。
(2N<=k<=10000)。。因为这个我w了好几次md
由于步数k不能相同,那我们用2n+(1,3,5,7)步来走
因为5->9;9->5就像是没走,再走一步到了九
走奇数步还是相当于一步
那这题输出个奇数,再输出个斜对角线就完事了
找规律输出斜对角线
1
2 5
3 6 9
4 7 10 13
8 11 14
12 15
第一个数1234,左上角,然后到了右上角突然变成8,12
我们考虑分两部分输出
再看每一行5-2=3
6-3=3;9-6=3
3不就是n-1吗
那直接ojbk了
#include <cstdio>
using namespace std;
int n;
int main() {scanf("%d", &n);int t = 1;for(int i = 1; i <= n; i++) {printf("%d", 2*(n+t++)-1);for(int j = 0; j < i; j++) {printf(" %d", i+(n-1)*j);}printf("\n");}for(int i = 2; i < n; i++) {printf("%d", 2*(n+t++)-1);for(int j = 0; j <= n-i; j++) {printf(" %d", n*i+j*(n-1));}printf("\n");}return 0;
}