UVA 10935 Throwing cards away I
思路:
用两倍大的整型数组存从1到n,那么会扔掉n-1个数,即遍历n-1次;
多设一个变量j,从0开始,每次修改值的时候加2,接下来是处理:
先把第j个元素丢出去,然后值改为-1,再把第j+1个元素的值放到最后,
· 此时的最后是第 j+n-i 的的位置,再改为-1。
注意:
如果输入1,那么扔出的是空,留下的是1。
1 #include<iostream> 2 #include<algorithm> 3 #include<vector> 4 using namespace std; 5 int main() 6 { 7 int n; 8 int a[105]; 9 //vector<int> vtr; 10 while (scanf("%d", &n) && n != 0) 11 { 12 for (int i = 1; i <= n; i++) 13 a[i - 1] = i; 14 int remain=1; 15 printf("Discarded cards:"); 16 for (int i = 0,j=0; i < n - 1; i++,j=j+2) 17 { 18 if (a[j] != -1) 19 { 20 printf(" %d", a[j]); 21 a[j] = -1; 22 int ex = a[j + 1]; 23 a[j + 1] = -1; 24 a[j+n-i] = ex; 25 if (i == n - 2) 26 remain = a[j + n - i]; 27 else 28 printf(","); 29 } 30 31 } 32 printf("\n"); 33 printf("Remaining card: %d\n",remain ); 34 } 35 return 0; 36 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步