问题 G: 圆桌上的晚餐
问题 G: 圆桌上的晚餐
时间限制: 1 Sec 内存限制: 128 MB提交: 1583 解决: 656
[提交] [状态] [命题人:jsu_admin]
题目描述
大家一定在圆桌上吃过饭了,现在问题很简单,n个人坐在一个圆桌旁,其中有一些人是吃饱了的。那么当服务员端菜到某个人面前的时候,如果这个人吃饱了的话,那么这个人就会进行‘战术谦让’把菜端到下一个人的面前,如此反复直到这个菜遇到还没有吃饱的人的面前的时候,这个菜就会被吃掉。那么这个菜到底会被哪个人吃掉呢。
输入
输入有多组数据 每组数据第一行有一个n,表示有n个人(1<= n <=1000)
第二行有一个m表示菜会被端到第m个人面前(1<= m <= n)
第三行有n个数字表示每个人的状态0表示还没有吃饱,1表示已经吃饱了
(编号从1开始,第n个人下一个人是第一个人)
第二行有一个m表示菜会被端到第m个人面前(1<= m <= n)
第三行有n个数字表示每个人的状态0表示还没有吃饱,1表示已经吃饱了
(编号从1开始,第n个人下一个人是第一个人)
输出
输出最终吃掉这个菜的人的编号答案一定存在
样例输入 Copy
5
5
0 0 0 0 1
5
3
1 0 1 1 1
样例输出 Copy
1
2
因为数据量不大,我们可以直接循环暴力,到达 n+1 的时候把位置置为 1
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<stdio.h> 2 #include<string.h> 3 int main(){ 4 int n; 5 int m; 6 int a[1010]; 7 while(scanf("%d",&n)!=EOF) 8 { 9 memset(a,0,sizeof(a)); 10 scanf("%d",&m); 11 for(int i = 1 ;i<=n;i++){ 12 scanf("%d",&a[i]); 13 } 14 bool flag = false; 15 int i = m; 16 while(!flag){ 17 if(a[i]==0){ 18 a[i] = 1; 19 flag = true; 20 break; 21 } 22 i++; 23 if(i==n+1) 24 { 25 i = 1; 26 } 27 } 28 printf("%d\n",i); 29 } 30 }