卡片游戏

mac2025-04-23  7

题目描述

  在桌子上有1摞卡片,每个卡片有一个正整数编号,从上到下卡片的编号为1到n,现在进行n次操作,每次操作先扔掉最顶端的卡片,然后将新的最顶端的卡片(如果有)放到这摞卡片的底部。 设第i次操作扔掉了编号为j的卡片(i从1开始),那么这次操作能加的分数为j%i分,求n次操作完成后的总分。

输入数据

  一个正整数n,n<1000000

输出数据

  每次扔掉卡片的编号,中间用空格分隔

样例输入 7 样例输出 18

样例说明   最后的总分可能会超出int的范围

程序分析
解题思路
front指向队首元素,rear指向队尾的下一个元素若剩下最后一个元素的时候,将卡片扔掉的时候,就不能向末尾继续放置卡片了,front==rear 的时候就越界了,所以需要一个判断: if front < rear: arrayList.append(arrayList[front]) front += 1 rear += 1
代码
n = int(input()) arrayList = [i+1 for i in range(n)] front, rear = 0, n timesJ = 1 total = 0 while front < rear and timesJ <= n: # n次操作 tempI = arrayList[front] total += (tempI % timesJ) timesJ += 1 front += 1 if front < rear: arrayList.append(arrayList[front]) front += 1 rear += 1 print(total)
最新回复(0)