C語言圍圈報數題目代碼實現

圍圈報數 題目

解題步驟

一.整體邏輯

1.從第1個人開始報數,
2.數到第m個人出列,
3.然後從出列的下一個人開始報數,
4.數到第m個人又出列,…,如此反復到所有的人全部出列為止。

二.邏輯的實現

1.創造一個數組來記錄人的信息
2.利用循環依次報數(當隻剩下一個人的時候,循環結束(因為不需要報數瞭,直接輸出就可以瞭))
3.輸出報到m的人,並且將他標記起來(表示此人已出列)
4.最後輸出剩下的那個人

三.代碼的實現

#include<stdio.h>
#include<string.h>
#pragma warning(disable:4996)
int main()
{
	int n, m;
	scanf("%d %d", &n,& m);
	int* arr = (int*)malloc(sizeof(int) * (n+1));  //創造一個數組
	for (int i = 0; i <= n; i++)
	{
		arr[i] = i ;                       
	}
	int number = 0;//出列的人數
	int k = 0;
	int j = 1;
	while (number < n - 1)  //當隻剩下一個人的時候推出
	{
		if (arr[j] != 0)//報數
		{
			k++;
		}	
		if (k == m)
		{
			printf("%d ", arr[j]);
			arr[j] = 0; //出列的人標記起來
			number++;
			k = 0;
		}
		j++;
		if (j == n+1)        //當最後一個人報完的時候,回到第一個人
			j = 1;
	}
	for (int i = 1; i <= n; i++)
	{
		if (arr[i] != 0)
			printf("%d", arr[i]);  //最後打印出剩下的一個人
	}
	return 0;
}

感悟

最近過得十分的壓抑,感覺胸上壓瞭塊石頭一樣,我覺得根本上還是自己太墮落瞭,沒有去努力,跟沒有去朝著能實現自己人生目標和價值的方向去奮鬥,所以才導致自己莫名的低落。所以我決定以後每天寫一到兩篇博客,即是對自己的督促,也是對知識的鞏固!

這個題本質上還是借助瞭鏈表的概念,創造一個數組也就是創造一個鏈表來保存隊伍的信息。
一開始我並沒有想到能直接創造一個數組來實現,導致想得過於復雜瞭。
以後在學數據結構的時候也要多做總結和歸納,吸取裡面寶貴的技巧,不能寫瞭一題忘瞭一題。

到此這篇關於C語言圍圈報數題目代碼實現的文章就介紹到這瞭,更多相關C語言圍圈報數內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: