CCF201712-Python题解

最小差值

原题链接:http://118.190.20.162/view.page?gpid=T68

试题编号: 201712-1
试题名称: 最小差值
时间限制: 1.0s
内存限制: 256.0MB

 

问题描述
  给定n个数,请找出其中相差(差的绝对值)最小的两个数,输出它们的差值的绝对值。
输入格式
  输入第一行包含一个整数n
  第二行包含n个正整数,相邻整数之间使用一个空格分隔。
输出格式
  输出一个整数,表示答案。
样例输入
5
1 5 4 8 20
样例输出
1
样例说明
  相差最小的两个数是5和4,它们之间的差值是1。
样例输入
5
9 3 6 1 3
样例输出
0
样例说明
  有两个相同的数3,它们之间的差值是0.
数据规模和约定
  对于所有评测用例,2 ≤ n ≤ 1000,每个给定的整数都是不超过10000的正整数。
 
题解暴力模拟,寻找每个数的最小差值,最后找min(每个数的最小 )
 1 n=int(input())
 2 a=list(map(int, input().split()))
 3 
 4 minn=10001
 5 for i in range(n):
 6     for j in range(i+1,n):
 7         tmp=abs(a[i]-a[j])
 8         if tmp<minn:
 9             minn=tmp
10 print(minn)     

 

 

 游戏

原题链接:http://118.190.20.162/view.page?gpid=T67

试题编号: 201712-2
试题名称: 游戏
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
  有n个小朋友围成一圈玩游戏,小朋友从1至n编号,2号小朋友坐在1号小朋友的顺时针方向,3号小朋友坐在2号小朋友的顺时针方向,……,1号小朋友坐在n号小朋友的顺时针方向。
  游戏开始,从1号小朋友开始顺时针报数,接下来每个小朋友的报数是上一个小朋友报的数加1。若一个小朋友报的数为k的倍数或其末位数(即数的个位)为k,则该小朋友被淘汰出局,不再参加以后的报数。当游戏中只剩下一个小朋友时,该小朋友获胜。
  例如,当n=5, k=2时:
  1号小朋友报数1;
  2号小朋友报数2淘汰;
  3号小朋友报数3;
  4号小朋友报数4淘汰;
  5号小朋友报数5;
  1号小朋友报数6淘汰;
  3号小朋友报数7;
  5号小朋友报数8淘汰;
  3号小朋友获胜。

  给定nk,请问最后获胜的小朋友编号为多少?
输入格式
  输入一行,包括两个整数nk,意义如题目所述。
输出格式
  输出一行,包含一个整数,表示获胜的小朋友编号。
样例输入
5 2
样例输出
3
样例输入
7 3
样例输出
4
数据规模和约定
  对于所有评测用例,1 ≤ n ≤ 1000,1 ≤ k ≤ 9。

 

 题解:模拟报数的整个过程,这里用列表模拟

 1 n, k = input().split()
 2 n, k = int(n), int(k)
 3 
 4 
 5 c = []
 6 num=1
 7 count=0
 8 for i in range(n):
 9     c+=[[num,1]]
10     num+=1
11     if(c[i][0]%k==0 or c[i][0]%10==k)and count!=n-1:
12         c[i][1]=0
13         count+=1
14             
15 
16 while(count<n-1):
17     for i in range(n):
18         if(c[i][1]==1) and count!=n-1:
19             c[i][0]=num
20             num+=1
21             if(c[i][0]%k==0 or c[i][0]%10==k)and count!=n-1:
22                 c[i][1]=0
23                 count+=1
24     
25 for i in range(n):
26     if c[i][1]==1:
27         print(i+1)
28         break
29     

 每次写,每次不同的写法

 1 n,k=input().split()
 2 n,k=int(n),int(k)
 3 
 4 a=[]
 5 num=n
 6 count=n
 7 for i in range(1,n+1):
 8     a+=[[1,i]]
 9     if (i%k==0 or i%10==k) and count!=1:
10         a[i-1][0]=0
11         count-=1
12 
13 while count!=1:
14     for i in range(n):
15         if a[i][0]==1:
16             num+=1
17             if num%k==0 or num%10==k:
18                 a[i][0]=0
19                 count-=1
20 
21 for i in range(n):
22     if a[i][0]==1:
23         print(a[i][1])
View Code

 

posted @ 2020-08-18 20:58  浅忆~  阅读(194)  评论(0编辑  收藏  举报