姓名、国籍、时间等),具体要求如下:
(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 救急啊