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!
推薦閱讀:
- C語言基於單鏈表實現通訊錄功能
- C語言函數基礎教程分類自定義參數及調用示例詳解
- C語言通過gets和gets_s分別實現讀取含空格的字符串
- C語言中儲存類別與內存管理的深入理解
- C語言變長數組使用詳解