求一个C++小程序

题目为:有两队选手,每对出5人进行一对一的比赛,甲队为A、B、C、D、E,乙队为J、K、L、M、N,经过抽签决定比赛配对名单。规定A不和J比赛,M不和D及E比赛。列出所有... 题目为:有两队选手,每对出5人进行一对一的比赛,甲队为A、B、C、D、E,乙队为J、K、L、M、N,经过抽签决定比赛配对名单。规定A不和J比赛,M不和D及E比赛。列出所有可能的比赛名单。
题目是吴乃陵的《C++程序设计》第二章(基本控制结构程序设计)的课后习题。
感觉要用枚举类型编写,但想不出什么算法,望高人指点,最好能给出程序,如果实在不行给出算法也可,谢谢!
好像是要定义enum~~希望答案详细些,谢谢!
展开
 我来答
栾珂謇鸿远
2019-04-22 · TA获得超过3674个赞
知道小有建树答主
回答量:3108
采纳率:30%
帮助的人:203万
展开全部
请看下面程序:
#include<iostream.h>
#include<math.h>
void
xopy();
void
prime();
void
sort(int*,int);
void
printstar(int);
void
main(){
char
c='1';
while(c!='5'){
cout
<<"\n\n";
cout
<<"\t--------------
功能清单
--------------\n";
cout
<<"\t1
四则运算\n"
<<"\t2
判断素数\n"
<<"\t3
输入10数,并进行排序,并按从小到大的顺序输出结果\n"
<<"\t4
使用“*”符号输入菱形图案\n"
<<"\t5
退出\n";
cout
<<"\t--------------------------------------\n";
cout
<<"\t请选择(1-5):";
while((c=cin.get())=='\n');
//忽略一些回车符
if(c=='5')
break;
switch(c){
case
'1':
xopy();
break;
case
'2':
prime();
break;
case
'3':
{
int
a[10],i;
cout
<<"请输入10个整数:\n";
for(i=0;i<10;i++)
cin
>>a[i];
sort(a,10);
cout
<<"排序后:\n";
for(i=0;i<10;i++)
cout
<<a[i]
<<"
";
cout
<<endl;
}
break;
case
'4':
{
int
n;
cout
<<"n=(1<=n<=9)?";
cin
>>n;
printstar(n);
}
break;
}
//
switch(c)
}
//
while(c!='0')
}//---------------
void
xopy(){
float
x,y,r;
char
op;
cout
<<"请输入一个算式(例如:12+5):";
cin
>>x
>>op
>>y;
switch(op){
case
'+':
r=x+y;
break;
case
'-':
r=x-y;
break;
case
'*':
r=x*y;
break;
case
'/':
if(y==0){
cout
<<"错误:除数为0!";
return;
}
r=x/y;
}
cout
<<x
<<op
<<y
<<"="
<<r
<<endl;
return;
}
//End
of
xopy()
void
prime(){
int
n,i,k,flag=1;
cout
<<"请输入一个正整数:";
cin
>>n;
k=int(sqrt(n));
for(i=2;flag
&&
i<=k;i++)
flag=n%i;
if(flag)
cout
<<n
<<"是素数\n";
else
cout
<<n
<<"不是素数\n";
return;
}//End
of
prime()
void
sort(int*
p,int
n){
int
i,j,k,t;
for(i=0;i<n-1;i++){
k=i;
for(j=i+1;j<n;j++)
if(p[k]>p[j])
k=j;
t=p[k],p[k]=p[i],p[i]=t;
}
return;
}//End
of
sort()
void
printstar(int
n){
int
i,j;
for(i=-n;i<=n;i++){
for(j=0;j<abs(i);j++)
cout
<<"
";
for(j=1;j<=(n-abs(i))*2+1;j++)
cout
<<"*";
cout
<<"\n";
}
}//End
printstar()
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
springyulei2
2008-10-12
知道答主
回答量:14
采纳率:0%
帮助的人:0
展开全部
#include <iostream.h>

int main()
{
char Team1[5]={'A','B','C','D','E'}; //定义数组Team1存储A队
char Team2[5]={'J','K','L','M','N'}; //定义数组Team2存储B队
int i,j; //定义i,j用于遍历2数组
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if((i==0&&j==0)||(i==3&&j==3)||(i==4&&j==3)) //判断AJ,MD,ME的组合
{
//如果是的就什么都不做
}
else
{
cout<<Team1[i]<<"---"<<Team2[j]<<"\n"; //如果不是的就配对(即输出)
}
}
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友7a16036
2008-10-12 · TA获得超过603个赞
知道小有建树答主
回答量:427
采纳率:50%
帮助的人:266万
展开全部
C语言中也有这个题,我用C写给你吧,你看看算法,自己去写C++程序
#include<stdio.h>
int main(void)
{
int t1,t2,t3,t4,t5; //假设t1=A,t2=B,t3=C,t4=D,t5=E
for(t1='J';t1<='N';t1++)
for(t2='J';t2<='N';t2++)
if(t1!=t2)
for(t3='J';t3<='N';t3++)
if(t1!=t3&&t2!=t3)
for(t4='J';t4<='N';t4++)
if(t1!=t4&&t2!=t4&&t3!=t4)
for(t5='j';t5<='N';t5++)
if(t1!=t5&&t2!=t5&&t3!=t5&&t4!=t5)
if(t1!='J'&&t4!='M'&&t5!='M') //满足题目条件
printf("A--%c B--%c C--%c D--%c E--% c\n",t1,t2,t3,t4,t5);
return 0;
}
程序趁写的可能有错(本人才学C不久),但算法应该没问题,这算法比较简单,但有点烦人,需要仔细,希望有高手给出更简洁的答案,我也学习学习
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友4fc7f15
2008-10-12 · TA获得超过311个赞
知道小有建树答主
回答量:144
采纳率:0%
帮助的人:119万
展开全部
采用枚举算法,穷搜就行了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式