}
3.14两队选手每队5人进行一对一的比赛,甲队为A、B、C、D、E,乙队为J、K、L、M、N,经过抽签决定比赛配对名单。
规定A不和J比赛,M不和D及E比赛。
列出所有可能的比赛名单。
解:
这是一个组合问题,使用穷举法。
共有5个位置,设甲队5名队员位置不变,乙队改变队员位置,进行配对。
注意第1个位置可在5个队员中任选一个,以后的位置必须扣除已选过的队员。
并扣除不能配对的情况,即得所有可能的比赛名单。
#include
voidmain(){
charst1[5]={'A','B','C','D','E'},st2[5]={'J','K','L','M','N'}。
inti=0,j,k,l,m,n。
for(j=0。
j<5。
j++){//0号位
if(j==0)continue。
//A不与J比赛,即st1[0]不与st2[0]比赛
for(k=0。
k<5。
k++){//1号位
if(k==j)continue。
for(l=0。
l<5。
l++){//2号位
if(l==j||l==k)continue。
for(m=0。
m<5。
m++){//3号位
if(m==j||m==k||m==l)continue。
if(m==3)continue。
//M不与D比赛,即st1[3]不与st2[3]比赛
for(n=0。
n<5。
n++){//4号位
if(n==3)continue。
//M不与E比赛,即st1[4]不与st2[3]比赛
if(n==j||n==k||n==l||n==m)continue。
cout<cout<cout<i++。
}
}
}
}
}
cout<
}
3.15编程模拟选举过程。
假定四位候选人:
zhang、wang、li、zhao,代号分别为1、2、3、4。
选举人直接键入候选人代号,1~4之外的整数视为弃权票,-1为终止标志。
打印各位候选人的得票以及当选者(得票数超过选票总数一半)名单。
解:
用5个元素的整型数组,分别放弃权票和各候选人的得票,然后用开关语句打印。
#include
#include
voidmain(){
enumcandidate{feipiao,zhang,wang,li,zhao}cand。
intvote[5]={0},i,k=0,n。
cin>>n。
while(n!
=-1){
k++。
if(n>=1&&n<=4)vote[n]++。
elsevote[0]++。
cin>>n。
}
for(i=0。
i<5。
i++){
cand=(candidate)i。
switch(cand){
casefeipiao:
cout<break。
casezhang:
cout<if(vote[cand]>k/2)cout<<"当选"<elsecout<break。
casewang:
cout<if(vote[cand]>k/2)cout<<"当选"<elsecout<break。
caseli:
cout<if(vote[cand]>k/2)cout<<"当选"<elsecout<break。
casezhao:
cout<if(vote[cand]>k/2)cout<<"当选"<elsecout<break。
}
}
}
3.16改造【例3.11】,将运行结果(Fibonacii数列的前20项)存入文件。
解:
采用3步法。
首先建立或打开一个输出文件,并与磁盘文件联系:
ofstreamofile("myfile3_16.txt")。
再按一定格式存入数据:
ofile<等
然后关闭文件:
ofile.close()。
如要读出数据,则用输入文件打开,并与同一磁盘文件联系:
ifstreamifile("myfile3_16.txt")。
再按同一格式读入数据:
ifile>>i>>j>>k>>l。
等,并输出
最后关闭文件:
file.close()。
#include
#include
constintm=20。
voidmain(){
intfib0=0,fib1=1,fib2,i,j,k,l。
charch,a[256]。
ofstreamofile("myfile3_16.txt")。
ofile<for(intn=3。
n<=m。
n++){
fib2=fib0+fib1。
ofile<if(n%5==0)ofile<//控制每行5个数据
fib0=fib1。
fib1=fib2。
}
ofile.close()。
cout<<"是否要将文件输出?
Y或N"<cin>>ch。
if(ch=='y'||ch=='Y'){
ifstreamifile("myfile3_16.txt")。
while
(1){
ifile>>i>>j>>k>>l。
//由文件读入
if(ifile.eof()!
=0)break。
cout<//屏幕显示
}
ifile.close()。
}
}
3.17改造【例3.16】,将运行结果(100以内素数)存入文件。
解:
采用4步法。
首先定义一个输出文件:
ofstreamofile。
再打开该文件并与并与磁盘文件联系:
ofile.open("myfile3_17.txt")。
按一定格式把数据存入文件。
最后关闭文件。
效果与3步法相同。
读文件同样可用3步法或4步法。
#include
#include
#include
constintn=100。
voidmain(){
inta[n],i,j。
charch,b[256]。
ofstreamofile。
ifstreamifile。
for(i=0。
ii++)a[i]=1+i。
//用数组保存整数1-100
a[0]=0。
//1不是素数,置0
for(i=0。
ii++){
if(a[i]==0)continue。
//该数已经置0,判断下一个数
for(j=i+1。
jj++)if(a[j]%a[i]==0)a[j]=0。
//是a[i]倍数的元素置0;
}
ofile.open("myf