小孩报数(链表和非链表两种方法),约赫夫数问题,真心废了好大功夫。。。
2014-01-26 16:29
225 查看
1、严禁抄袭,可以讨论算法;2、不用全部完成,尽力就好;3、尽快把上次的代码打包传给我,290187391@qq.com。4、1004和1005请用STL来做,本周我们应该看一下STL的基本用法,可以在群里讨论。
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
Sample Output
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;
}
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;
}
相关文章推荐
- 小孩报数-约瑟夫问题数组链表
- ASP.NET MVC中 CKeditor 通过两种方法向后台传值以及编码、乱码问题
- 两种方法解决Oracle的数值0.5只显示成.5问题
- Android 中无法取消标题栏的问题小结(两种方法)
- 1020: 兄弟郊游问题(两种方法)
- 判断链表是否有环的两种方式和创建有无环的方法
- 小孩报数问题
- 【java基础 13】两种方法判断hashmap中是否形成环形链表
- POJ-3750 小孩报数问题-约瑟夫问题
- 探讨两种方法解决大小、数字字符排序问题
- poj 3750 小孩报数问题
- POJ 3750 小孩报数问题 数据结构水
- 北京大学ACM---poj3750---小孩报数问题(循环链表求解法)
- n皇后问题的两种递归方法C语言实现
- 解决servlet中输出中文到浏览器以及post、get两种提交方法乱码问题
- 两种php中文字符转拼音问题解决方法
- 添加Java Security Provider的两种方法/解决no such provider: BC的问题
- oracle自增问题(两种方法)!
- 单向链表逆转(带头结点)的两种方法
- poj3750 小孩报数问题