C語言幸運兒問題

幸運兒

Time Limit: 3000ms, Memory Limit: 10000KB , Accepted: 2299, Total Submissions: 3279

Description

遊樂園準備抽獎選擇一批幸運兒童(X個人)進行玩具獎勵,想請你幫忙處理這件事。
這次抽獎是將所有兒童排成一排,然後從一疊卡片的頂部取卡片,卡片號爲N;從隊列中由1到N進行報數,每次報到N時,第N個兒童離開隊列,然後下一個兒童再從1開始報數。當報數報到隊列結束的時候,再從一疊卡片的頂部取下一張卡片,再從剩餘的隊列中從第1人開始根據新的卡片號進行報數。最後,隊列中的X個人獲獎。
然而,只有到了遊戲前的一分鐘才知道有多少兒童參加抽獎。請你編寫程序,基於卡片和隊列中兒童的數量,求出隊列中哪些兒童可以獲獎。可以確定最多用20張卡片。
例如:隊列中有10名兒童,2個幸運位置,卡片號碼爲3、5、4、3、2,隊列位置中1和8的兒童可以獲獎,過程如下:
(1)隊列1、2、3、4、5、6、7、8、9、10,N=10,X=2,卡片次序爲3、5、4、3、2、……
(2)3:劃掉3、6、9,剩下1、2、4、5、7、8、10;
(3)5:劃掉7,剩下1、2、4、5、8、10;
(4)4:劃掉5,剩下1、2、4、8、10;
(5)3:劃掉4,剩下1、2、8、10;
(6)2:劃掉2、10,剩下1、8;

Input

第1行先輸入一個整數N(1≤N≤50)給出參加抽獎的兒童人數,再輸入一個整數X(1≤X≤9)給出有多少個幸運位置。
第2行輸入20個整數給出前20張卡片上的號碼,卡片號碼爲1~11的整數,用空格隔開。

Output

輸出幸運位置列表,用空格隔開。

  • Sample Input 
    10 2
    3 5 4 3 2 9 6 10 10 6 2 6 7 3 4 7 4 5 3 2
  • Sample Output

    1 8



#include<stdio.h>
#include<string.h>
int main()
{
     int m,n,c[21],i;
scanf("%d%d",&m,&n) ;
for(i=1;i<=20;i++)
{
scanf("%d",&c[i]);
}
     int j,k,b[51],p,q,t;
     for(i=1;i<=m;i++)//爲這m個孩子賦初值,若被篩掉,則該值變爲0
{
b[i]=1;
}
for(i=1;i<=20;i++)
{
p=c[i];
k=0;
for(j=1;j<=m;j++)
   {
      t=0;
          if(b[j]!=0)k++;
 if(k==p)b[j]=0,k=0;
 for(q=1;q<=m;q++)
   {
    if(b[q]==1)t++;
   }
   if(t==n)goto L;//若此時只剩下n個人則跳出循環
   }
   
}
L: for(i=1;i<=m;i++)
{
if(b[i]==1)printf("%d ",i);
}
 
 
}




發佈了52 篇原創文章 · 獲贊 23 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章