您的位置:首页 > 其它

小孩报数(链表和非链表两种方法),约赫夫数问题,真心废了好大功夫。。。

2014-01-26 16:29 225 查看
1、严禁抄袭,可以讨论算法;2、不用全部完成,尽力就好;3、尽快把上次的代码打包传给我,290187391@qq.com。4、1004和1005请用STL来做,本周我们应该看一下STL的基本用法,可以在群里讨论。


Problem A


Time Limit : 2000/1000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other)


Total Submission(s) : 13 Accepted Submission(s) : 6


Problem Description

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

Input

第一行输入小孩的人数N(N<=64)

接下来每行输入一个小孩的名字(人名不超过15个字符)

最后一行输入W,S (W < N),用逗号","间隔

Output

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

Sample Input

5
Xiaoming
Xiaohua
Xiaowang
Zhangsan
Lisi
2,3


Sample Output

Zhangsan
Xiaohua
Xiaoming
Xiaowang
Lisi


AC代码(链表):

#include <stdio.h>

//#include <malloc.h> 出现了这个错误,F:\temp\12478026.73323\Main.cc:2:20: error: malloc.h: No such file or directory把该头文件注释了就好了,加上头文件#include<stdlib.h>就好了

#include<stdlib.h>

#include<string.h>

#include<iostream>

using namespace std;

struct LNode{

char data[16]; //这里用string data;([16],表示最多有16个字符)就不行!在VC里就通不过在DEV里能运行。在提交代码的时候也通不过,为啥?。。。

LNode *next;

};

void InitList_Sq(LNode *l) //创建线性表

{

int n,i,a,b,k;

char c;

LNode *p=NULL,*r=NULL,*m=NULL; //临时指针变量

scanf("%d",&n);

getchar();

r=l;

for(i=1;i<=n;i++)

{

p=(LNode*)malloc(sizeof(LNode));

cin>>p->data;

p->next=NULL; r->next=p; r=p;

}

r->next=l->next;

cin>>a>>c>>b;

for(i=1;i<a;i++)

l=l->next;

r=l;

if(b==1)

while(n)

{

r=r->next;

cout<<r->data<<endl;

n--;

}

else

while(n)

{

k=b-1;

while(k--)

{

r=r->next;

}

m=r->next;

cout<<m->data<<endl;

n--;

if(n==1){cout<<r->data<<endl;break;}

r->next=m->next;

}

}

int main()

{

LNode *l;

int e;

l=(LNode*)malloc(sizeof(LNode)); //头节点

l->next=NULL;

InitList_Sq(l);

return 0;

}

AC代码(非链表):
#include<iostream>

using namespace std;

#include<string.h>

int main()

{

int n,i,m,c,b,j;

char a[66][16],d;//之前还是对字符串用的不熟悉,对于输入多个字符串,可以将前面的那个[]当成是行(即多少个字符串),后面的那个当成是列(即字 符串的长度)

cin>>n;

for(i=1;i<=n;i++)

cin>>a[i];

cin>>b>>d>>c;

strcpy(a[0],a
); //将a
复制给a[0];

for(i=b,m=0,j=0;;i++)

{

i=i%n; //对于让这列数形成一个环的话,就利用求余的方法,%他的总长度,将a
=a[0]就可以了!!!!!!

if(strcmp(a[i],"0")==0)continue; //对于该排除的数时,让之变为0,下次碰见0直接跳过就可以了

j++;

if(j==c)

{

cout<<a[i]<<endl;

strcpy(a[i],"0");

m++;

j=0;

if(m==n)break;

}

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: