| Time Limit: 1000MS | Memory Limit: 30000K | |
| Total Submissions: 3548 | Accepted: 2024 |
Description
There is a deck of n cards. Starting from the p-th card from the top of the deck, c cards are pulled out and put on the top of the deck, as shown in Figure 1. This operation, called a cutting operation, is repeated.
Write a program that simulates Hanafuda shuffling and answers which card will be finally placed on the top of the deck.
Figure 1: Cutting operation
Input
There are r more lines in the data set, each of which represents a cutting operation. These cutting operations are performed in the listed order. Each line contains two positive integers p and c (p + c <= n + 1). Starting from the p-th card from the top of the deck, c cards should be pulled out and put on the top.
The end of the input is indicated by a line which contains two zeros.
Each input line contains exactly two integers separated by a space character. There are no other characters in the line.
Output
Sample Input
5 2 3 1 3 1 10 3 1 10 10 1 8 3 0 0
Sample Output
4 4
Source
题目类型:简单数学计算
题目大意:
一副纸牌,共计n张。第1~n张牌的值从上到下依次是:n,n-1,……,3,2,1。对这些牌进行cut操作:从第p张牌依次取出c张放在牌首。进行 r 次cut操作。
题目浅析:
数据量比较小,将纸牌模拟为数组,直接移动就行。
我的代码:
#include<stdio.h>
int main()
{
int n,r,i,j;
int p,c;
int a[60],temp[60];
while(scanf("%d%d",&n,&r)&&n&&r)
{
for(i=1;i<=n;i++)
a[i]=n-i+1;
while(r--)
{
scanf("%d%d",&p,&c);
for(i=p,j=1;j<=c;i++,j++)
temp[j]=a[i];
for(i=p-1;i>=0;i--)
a[i+c]=a[i];
for(i=1;i<=c;i++)
a[i]=temp[i];
}
printf("%d\n",a[1]);
}
return 0;
}
361



被折叠的 条评论
为什么被折叠?



