急求有关C++的三个题目的代码

时间:2022-03-25 01:33:14
□ 百米赛跑:有n个运动员参加百米赛跑,编写程序完成比赛,并显示比赛结果(名次,
姓名、国籍、时间等),具体要求如下:
(1)基于对象的编程方法
(2)编写函数进行比赛模拟
(3)基于泛型的编程
(4)程序有良好的使用界面
(5)代码结构规范、书写清晰并有适当的注释

□ 商品销售:某商店有若干商品,包括名称、进货单价、销售单价、库存数量等信息。编
写程序,对该商店的商品销售进行模拟,要求涉及商品库存数量、商店资金总额、商店销
售利润等相关信息。
(1)基于对象的编程方法
(2)编写函数进行销售模拟
(3)基于泛型的编程
(4)程序有良好的使用界面
(5)代码格式规范、书写清晰并有适当的注释

□ 约瑟夫环:n个人坐成一圈,从某个人开始,从1开始依次报数,报到7的人离开,他
的下一个人重新从1开始报数,……,直到所有的人都离开。编写程序,依次显示离开的
人的姓名和相关信息。
(1)基于对象的编程方法
(2)基于泛型的编程
(3)程序有良好的使用界面
(4)代码结构规范、书写清晰并有适当的注释

8 个解决方案

#1


唉!~~

#2



约瑟夫(Joeph)问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。

我这里的第一个正整数是用了第一个人手中的密码。其实也不难,好像好多人问。经常问。

#include<iostream>

using std::size_t; using std::cout;
using std::cin;    using std::endl;
using std::ends;  

struct Person
{  
    Person(size_t v=1,size_t c=5,Person* n=NULL,Person* p=NULL):\
    origin(v),code(c),next(n),previous(p){}
    size_t  origin;
    size_t  code;    
    Person* previous;   
    Person* next;           
};

void CreateCircle(Person** head)
{   
   Person *pt=NULL;
   Person *p=NULL;
   size_t num;  
   
   cout<<"How many persons to attend this activity?"<<endl;
   cin>>num;
   pt=p=new Person;
   *head=pt;
   pt->origin=1;
   cout<<"Please input code for number 1:";
   cin>>pt->code;
   for(size_t i=2;i<=num;++i)
   {
     p=new Person;
     p->origin=i;
     cout<<"Please input code for number "<<i<<":";
     cin>>p->code;
     pt->next=p;
     p->previous=pt;
     pt=p;                
   }
   pt->next=*head;   //make it a completed circle
   (*head)->previous=pt;  
   cout<<endl;
}

void Play(Person** head)
{
   Person* pt=*head;
   Person* p=NULL;
   size_t val=pt->code-1;   
   while(pt!=pt->next)
   {      
      while(val)
      {
        pt=pt->next;
        --val;        // decrease the val to make it stop properly          
      }
      cout<<"original number "<<pt->origin<<"is out."<<endl;
      cout<<"It's code is "<<pt->code<<endl<<endl;
      pt->previous->next=pt->next;       //Maintain the data structure
      pt->next->previous=pt->previous;
      p=pt;
      pt=pt->next;
      val=p->code-1;
      delete p;                 
   }
   cout<<"The last one's original number is "<<pt->origin<<endl;
   cout<<"It's code is "<<pt->code<<endl<<endl;
   delete pt;
   *head=NULL;         //set pointer
}



int main()
{
  Person* head;
  CreateCircle(&head);
  Play(&head);
    
  system("pause");
  return 0;    
}



#3


不好不好

#4


前俩个不难的啊!你建个类把方法写进去就行了啊!很简单的啊!只不过是麻烦了点!,你写的已经很详细了啊!思路很清晰!

#5


谁能把第一个的程序写下.

#6


第一个输入输入时间通过实践排序就行了。

#7


俺要不是忙着该复习功课了,俺给你写个,很简单的啊!楼上说的很对啊!就是常见一个对象把那几部分当成属性,然后按时间排序输出!

#8


哪位高手能把第一 二 个写写啊2   救急啊

#1


唉!~~

#2



约瑟夫(Joeph)问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。

我这里的第一个正整数是用了第一个人手中的密码。其实也不难,好像好多人问。经常问。

#include<iostream>

using std::size_t; using std::cout;
using std::cin;    using std::endl;
using std::ends;  

struct Person
{  
    Person(size_t v=1,size_t c=5,Person* n=NULL,Person* p=NULL):\
    origin(v),code(c),next(n),previous(p){}
    size_t  origin;
    size_t  code;    
    Person* previous;   
    Person* next;           
};

void CreateCircle(Person** head)
{   
   Person *pt=NULL;
   Person *p=NULL;
   size_t num;  
   
   cout<<"How many persons to attend this activity?"<<endl;
   cin>>num;
   pt=p=new Person;
   *head=pt;
   pt->origin=1;
   cout<<"Please input code for number 1:";
   cin>>pt->code;
   for(size_t i=2;i<=num;++i)
   {
     p=new Person;
     p->origin=i;
     cout<<"Please input code for number "<<i<<":";
     cin>>p->code;
     pt->next=p;
     p->previous=pt;
     pt=p;                
   }
   pt->next=*head;   //make it a completed circle
   (*head)->previous=pt;  
   cout<<endl;
}

void Play(Person** head)
{
   Person* pt=*head;
   Person* p=NULL;
   size_t val=pt->code-1;   
   while(pt!=pt->next)
   {      
      while(val)
      {
        pt=pt->next;
        --val;        // decrease the val to make it stop properly          
      }
      cout<<"original number "<<pt->origin<<"is out."<<endl;
      cout<<"It's code is "<<pt->code<<endl<<endl;
      pt->previous->next=pt->next;       //Maintain the data structure
      pt->next->previous=pt->previous;
      p=pt;
      pt=pt->next;
      val=p->code-1;
      delete p;                 
   }
   cout<<"The last one's original number is "<<pt->origin<<endl;
   cout<<"It's code is "<<pt->code<<endl<<endl;
   delete pt;
   *head=NULL;         //set pointer
}



int main()
{
  Person* head;
  CreateCircle(&head);
  Play(&head);
    
  system("pause");
  return 0;    
}



#3


不好不好

#4


前俩个不难的啊!你建个类把方法写进去就行了啊!很简单的啊!只不过是麻烦了点!,你写的已经很详细了啊!思路很清晰!

#5


谁能把第一个的程序写下.

#6


第一个输入输入时间通过实践排序就行了。

#7


俺要不是忙着该复习功课了,俺给你写个,很简单的啊!楼上说的很对啊!就是常见一个对象把那几部分当成属性,然后按时间排序输出!

#8


哪位高手能把第一 二 个写写啊2   救急啊