HDU4492 Mystery
输入:首先是一个T(1<=T<=1000)表示一下有T个实例,然后每个实例是一个数据集,数据集第一行是一个d表示该数据集的按序编号(从1开始),数据集的第二行是长度不超过93的一串字符集(有空白字符,但是每个字符都不同),数据集第三行是一个n,表示数据集第四行有多少个数字。数据集第4行是n个位移值。初始时指针在0,然后依次循环加上位移值,指向之前给出的字符集。
例:
2
IW2C0NP3OS 1RLDFA
22
0 3 3 -3 7 -8 2 7 -4 3 8 7 4 1 1 -4 5 2 5 -6 -3 -4
第一个位移值为0,则第一个字符选I,第二个位移为3,则第二个字符选c,依次类推(如果指针值加位移值变负数,则指倒数第几个的意思。)
输出:首先是数据集的编号+空格+所指的字符串。
分析:直接按序求余求出各个位置指定的字符,构成字符串输出即可。
scanf("%d%*c",&d);表示从缓冲区中读走一个字符,但是不赋给任何变量,主要用于清楚无用字字符,比如前一次输入后最后面安了个回车,就可以用这个来处理
scanf("%*c%c",&ch);//这样就是先清楚前一个无效字符,在读下一个有效的给ch。
- #include<cstdio>
- #include<cstring>
- #include<iostream>
- using namespace std;
- char str1[200];
- char str2[200];
- int main()
- {
- int t;
- scanf("%d",&t);
- while(t--)
- {
- int d,n;
- scanf("%d%*c",&d);//这里用%*c表示读一个字符但是不储存
- gets(str1);
- int len=strlen(str1);
- scanf(" %d",&n);
- int p=0;//指针初始为0
- for(int i=0;i<n;i++)
- {
- int x;
- scanf("%d",&x);
- p = (p+x+len)%len;//指针的下一个值
- str2[i]=str1[p];
- }
- printf("%d ",d);
- for(int i=0;i<n;i++)
- printf("%c",str2[i]);
- printf("\n");
- }
- return 0;
- }