1. 程式人生 > 其它 >CCF 201712-2 遊戲 C語言程式碼(100分)

CCF 201712-2 遊戲 C語言程式碼(100分)

技術標籤:ccfccf

CCF 201712-2 遊戲 C語言程式碼(100分)

問題描述

試題編號: 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號小朋友獲勝。

給定n和k,請問最後獲勝的小朋友編號為多少?
  
輸入格式
  輸入一行,包括兩個整數n和k,意義如題目所述。
  
輸出格式
  輸出一行,包含一個整數,表示獲勝的小朋友編號。
  
樣例輸入
5 2

樣例輸出
3

樣例輸入
7 3

樣例輸出
4

資料規模和約定
  對於所有評測用例,1 ≤ n ≤ 1000,1 ≤ k ≤ 9。

解題思路

本題可以直接用兩層迴圈的硬解法解出滿分答案。
通過while迴圈控制只剩一個學生,根據題幹所要求條件使用for迴圈淘汰學生。

詳細程式碼

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
	int n,k,i,j=0,result=0;
	scanf("%d %d"
,&n,&k); int a[n],count=n; for(i=0;i<n;i++){ a[i]=1; } while(count!=1){ for(i=0;i<n;i++){ if(a[i]==0){ continue; } j++; a[i]=j; if(a[i]%k==0||a[i]%10==k||a[i]%100==k){ a[i]=0; count--; } if(count==1){ break; } } } for(i=0;i<n;i++){ if(a[i]!=0){ result=i+1; } } printf("%d",result); return 0; }

## 如何改變文字的樣式