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

来源:互联网 发布:大淘客网站源码 编辑:程序博客网 时间:2024/04/28 12:33
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
5XiaomingXiaohuaXiaowangZhangsanLisi2,3
 

Sample Output
ZhangsanXiaohuaXiaomingXiaowangLisi
 


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[n]);     //将a[n]复制给a[0];
    for(i=b,m=0,j=0;;i++)
    {
i=i%n;        //对于让这列数形成一个环的话,就利用求余的方法,%他的总长度,将a[n]=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;
    
}
0 0
原创粉丝点击