小孩报数问题

来源:互联网 发布:电大好还是网络教育好 编辑:程序博客网 时间:2024/06/11 19:34

Description

有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序。

Input

第一行输入小孩的人数N(N<=64)
接下来每行输入一个小孩的名字(人名不超过15个字符)
最后一行输入W,S (W < N),用逗号","间隔

Output

按人名输出小孩按顺序出列的顺序,每行输出一个人名

Sample Input

5XiaomingXiaohuaXiaowangZhangsanLisi2,3

Sample Output

ZhangsanXiaohuaXiaomingXiaowangLisi普通版:#include<iostream>#include<cstring>using namespace std;int main() {    char name[56][16];    int n, w, s;    cin >> n;    for (int i = 1; i <= n; i++) {        cin >> name[i];    }    scanf("%d,%d", &w, &s);    int count = 0;                            //记录经过未标记的名字几次    int k = 0;                                //记录输出的次数    for (int i = w; k!=n ; i++) {            //输出 n 次,跳出        if (i > n) i = i % n;                //循环 1~n~1~n        if (strcmp(name[i], "1")) count++;    //经过未标记的名字时 count++        if (count == s) {                    //经过s次未被标记的名字时            cout << name[i] << endl;            k++;                            //输出一次 k++            count = 0;                        //输出以后count重新记数            w = i;                            //输出之后,w 重新从 i 开始            strcpy(name[i], "1");            //已经输出的名字标记为 1         }    }    return 0;}线性表:#include<iostream>#include<string>using namespace std;class SeqList {public:    SeqList(string str[], int n);            //构造函数,创建长度为n 的线性表    string Delete(int i);                    //输出并删除结点    int getLength() { return length; }        //获取长度private:    int length;    string name[65];};SeqList::SeqList(string str[], int n) {        //实现构造函数    for (int i = 0; i < n; i++) {        name[i] = str[i];    }    length = n;}string SeqList::Delete(int i) {    string x = name[i - 1];                    //定义一个x接收被删除的字符串    for (int j = i; j < length; j++) {        //从被删除的结点开始,后面的向前移动,覆盖被删除的结点        name[j - 1] = name[j];                            }    length--;                                //删除一个结点,长度减 1    return x;}int main() {    string str[65];    int n, w, s;    cin >> n;    for (int i = 0; i < n; i++) {        cin >> str[i];    }    scanf("%d,%d", &w, &s);    SeqList S(str, n);    while(n--) {        int ans = (w + s - 1);                 //ans 表示要输出的名字的序号        if ( ans==S.getLength() ) {            w = ans;            cout << S.Delete(w) << endl;        }        else {            if (ans % S.getLength() != 0) {                w = ans % S.getLength();                cout << S.Delete(w) << endl;            }            else {                cout << S.Delete(w--) << endl;            }                    }    }    return 0;}
0 0
原创粉丝点击