18410 最后一张纸片
有N张(N不超过1000)纸片,每张纸片上有一个数字从1至N,最初N张纸片按由大到小顺序叠放(编号最大的在最下面),现在不断重复执行如下操作: (1)将最上面的一张放到最下面; (2)再将最上面的一张放到最下面; (3)将当前最上面的一张拿走; 重复上面操作(1)(2)(3)(1)(2)(3)(1)...... 直到剩下最后一张纸片,输出该纸片上的编号
输入格式
一个正整数N
输出格式
剩下的最后一张纸片编号
输入样例
3
输出样例
2
提示:N=3时,每列表示一次操作后的纸片排列情况
1 2 3 1 2 1 2 2 3 1 2 1 2 3 1 2
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int n;
int temp;
scanf("%d", &n);
int i,j = n,k;
int a[n];
for (i = 0;i < n;i ++)
{
a[i] = j;
j--;
}
for (i = n-1;i >= 1;i --) //n-1次取卡片
{
for (k = i;k >= 1;k --) //(1)将最上面的一张放到最下面
{
temp = a[k];
a[k] = a[k-1];
a[k-1] = temp;
}
for (k = i;k >= 1;k --) //(2)再将最上面的一张放到最下面
{
temp = a[k];
a[k] = a[k-1];
a[k-1] = temp;
}
a[i] = '\0'; //(3)将当前最上面的一张拿走
}
printf("%d" ,a[0]);
return 0;
}