1069. 微博转发抽奖(20)
1069. 微博轉發抽獎(20)
時間限制 400 ms內存限制 65536 kB
代碼長度限制 8000 B
判題程序 Standard 作者 CHEN, Yue
小明PAT考了滿分,高興之余決定發起微博轉發抽獎活動,從轉發的網友中按順序每隔N個人就發出一個紅包。請你編寫程序幫助他確定中獎名單。
輸入格式:
輸入第一行給出三個正整數M(<= 1000)、N和S,分別是轉發的總量、小明決定的中獎間隔、以及第一位中獎者的序號(編號從1開始)。隨后M行,順序給出轉發微博的網友的昵稱(不超過20個字符、不包含空格回車的非空字符串)。
注意:可能有人轉發多次,但不能中獎多次。所以如果處于當前中獎位置的網友已經中過獎,則跳過他順次取下一位。
輸出格式:
按照輸入的順序輸出中獎名單,每個昵稱占一行。如果沒有人中獎,則輸出“Keep going...”。
輸入樣例1: 9 3 2 Imgonnawin! PickMe PickMeMeMeee LookHere Imgonnawin! TryAgainAgain TryAgainAgain Imgonnawin! TryAgainAgain 輸出樣例1: PickMe Imgonnawin! TryAgainAgain 輸入樣例2: 2 3 5 Imgonnawin! PickMe 輸出樣例2: Keep going...解析:計算機科學最重要的方法論就是分層\封裝,如計算機系統結構,TCP\IP結構,這樣做了以后可以使一件非常復雜的事情變得非常的明晰,這里面揭示了一種解決問題的方法論,就是一個問題非常復雜,看能不能分成幾個層次或者階段,在數學中也是這樣,一個定理非常復雜(上學時我導師曾經用8個課時講完一個定理),但是并不是上來就懟這個定理,而是講了將近六七個引理,然后將這些引理連到一起就成了這個定理.
本題算法很簡單(人腦想象),但是實現起來一頭霧水,那就分成幾個階段吧:
1,從第S個開始, 每隔N個輸出名字---->不難
2,在1基礎上,輸出名字時,順便把名字存到另外一個數組中(供查閱是否有人重復得獎使用)--->簡單
3,在2基礎上,如果有人重復得獎,則把這種情況除掉--->簡單
4, 在3的基礎上增加沒有人得獎這種情況-->簡單
代碼如下:
/*************************************************************************> File Name: 1069.c> Author: YueBo> Mail: yuebowhu@163.com> Created Time: Tue 30 May 2017 08:00:14 AM CST************************************************************************/#include <stdio.h> #include <string.h> #include <stdlib.h>int main() {int M, N, S;char names[1000][32];char tmp[20];int i, j = 0, k;int cnt = 0;int flag, flag1 = 0;scanf("%d%d%d", &M, &N, &S);for (i = 1; i < S; i++)scanf("%s", tmp);i = 1;cnt = N - 1;while (i+S-1 <= M){scanf("%s", tmp);cnt++;if (cnt == N){flag = 0;for (k = 0; k < j; k++){if (!strcmp(names[k], tmp)){flag = 1;break;}}if (flag == 0){flag1 = 1;printf("%s\n", tmp);strcpy(names[j], tmp);j++;cnt = 0;}elsecnt = N - 1;}i++;}if (flag1 == 0)printf("Keep going...\n");return 0; }
總結
以上是生活随笔為你收集整理的1069. 微博转发抽奖(20)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第5章 Python 数字图像处理(DI
- 下一篇: Excel可视化图表模板,图表控的你快收