8 條題解

  • 1
    @ 2025-11-27 0:37:46
    #include <stdio.h>
    int find(int m, int x) {
    	int flag[1000] = {0}; //用1来标记去除
    	int count = 0;          
    	int cnt = m;          
    	int ans = 0;          
    	while (cnt > 1) {
    		while (flag[ans] == 1) {
    			ans = (ans + 1) % m; 
    		}		
    		count++;		
    		if (count == x) {
    			flag[ans] = 1; 
    			cnt--;
    			count = 0;         
    		}		
    		ans = (ans + 1) % m;
    	}	
    	for (int i = 0; i < m; i++) {
    		if (flag[i] == 0) {
    			return i + 1;
    		}
    	}
    }
    int main() {
    	int n;
    	scanf("%d", &n);
    	for (int i = 1; i <= n; i++) {
    		int m, x;
    		scanf("%d%d", &m, &x);
    		printf("%d\n", find(m, x));
    	}	
    	return 0;
    }
    

    資訊

    ID
    198
    時間
    3000ms
    記憶體
    128MiB
    難度
    3
    标签
    (無)
    遞交數
    392
    已通過
    201
    上傳者