C++课程设计南通大学计算机科学与技术学院Word文件下载.docx
《C++课程设计南通大学计算机科学与技术学院Word文件下载.docx》由会员分享,可在线阅读,更多相关《C++课程设计南通大学计算机科学与技术学院Word文件下载.docx(22页珍藏版)》请在冰豆网上搜索。
for(i=0;
for(intj=0;
j<
j++)
{
if(a[i]==2*a[j])
{cout<
a[i]<
是"
a[j]<
的两倍"
t++;
}
答案是:
t<
103.(3分)找出所有这样的3位数,390625——625*625
{
for(intx=100;
x<
=999;
x++)
if(x*x%1000==x)
cout<
的平方为:
x*x<
104.(3分)找出既是素数又是回文数(从右向左读和从左向右读相同)的3位数。
cmath>
boolsushu(intx)//判断是否为素数
{
for(inti=2;
=(int)sqrt(x);
i++)
if(x%i==0)return0;
return1;
intx,a,b,c;
for(x=100;
a=x%10;
//求个位数
b=x/10%10;
//求十位数
c=x/100;
//求百位数
if((sushu(x))!
=0&
&
a==c)cout<
'
\t'
;
//既满足是素数又是回文数,因为是3位数,所以个位等于百位就可以
106.(3分)求这样一个3位数,abc=a!
+b!
+c!
。
intf(intn)
{ints=1;
=n;
s*=i;
returns;
{intx,a,b,c;
a=x%10;
c=x/100;
if(x==f(a)+f(b)+f(c))
107.(3分)求5位数既能被5整除,又能被3整除。
已知54-7-
inta,b,t=0;
for(a=0;
a<
=9;
a++)
for(b=0;
b<
b++)
if((5*10000+4*1000+a*100+7*10+b)%5==0&
(5*10000+4*1000+a*100+7*10+b)%3==0)
54"
7"
这样的数共有"
个"
108.(4分)鸡兔同笼,共有头98只,脚386只,编程求鸡、兔各多少只?
intx,y;
//鸡有x只,兔有y只
for(x=1;
=98;
x++)//循环,设置循环条件,鸡或兔都应小于等于头的数
for(y=1;
y<
y++)
{
if((x+y==98)&
(2*x+4*y==386))//满足条件头有98,脚有386.
cout<
鸡有"
只,兔有"
只。
109.(4分)百鸡问题。
设公鸡5元一只,母鸡3元一只,小鸡一元3只,请问花一百元买100只鸡,且需包含公鸡、母鸡和小鸡,有哪几种方案。
intx,y,z;
//公鸡x只,共5x元,母鸡y只,共3y元,小鸡3z只,共z元。
=100/5;
x++)//限制x,y,z的条件是鸡的最大只数。
{for(y=1;
=(int)100/3;
for(z=1;
z<
=100;
z++)
if((5*x+3*y+z==100)&
(x+y+3*z==100))//限制条件百元白鸡
cout<
公鸡"
只,母鸡"
只,小鸡"
3*z<
110.(4分)三色球问题。
若一个口袋中放有12只球,其中有红球3只,白球3只,黑球6只,试问从中任取8只球,共有多少种不同色取法。
intx,y,z,t=0;
//取红球x个,白球y个,黑球z个。
t用来统计有多少种取法
for(x=0;
=3;
x++)//因为各种颜色的球的个数有限制,所以限制条件
{for(y=0;
for(z=0;
=6;
if(x+y+z==8)//满足要求的条件
{cout<
取红球"
个,白球"
个,黑球"
个。
共有"
种取法"
111.(4分)用1元5角人民币兑换5分、2分和1分的硬币(每一种都要有)共100枚,问共有几种兑换方案?
每种方案各换多少枚?
分析:
将单位换位,则共有150分,再确定x,y,z的限制条件.
//x指5分的枚数,y指2分的枚数,z指1分的枚数。
t统计方案数
150/5;
150/2;
150;
if((x+y+z==100)&
(5*x+2*y+z==150))
5分的"
枚,2分的"
枚,1分的"
枚"
种方案"
112.(4分)一辆卡车违反交通规则,撞人逃跑。
现场三人目击事件,但都没记住车号,只记下车号的一些特征。
甲说:
拍照的前两位数字是相同的;
乙说:
拍照的后两位数字是想同的;
丙是位数学家,他说:
四位的车号刚好是一个整数分平方。
请根据以上线索求出车号。
inta,b;
//a代表车牌号的第一、第二位,b代表第三、第四位。
{for(b=0;
for(inti=1;
100;
i++)//因为100的平方是5位数,所以四位数的开根号一定小于100.
if(a*1000+a*100+b*10+b==i*i&
a!
=b)
车牌号为:
//也可以输出i*i。
113.(4分)编程输出满足下列算式的各字母所代表的数字。
PEAR-ARA=PEA。
intP,E,A,R;
for(P=1;
P<
P++)//注意,因为P、E有出现在数字的首位,所以不能为0
for(A=1;
A<
A++)
for(R=0;
R<
R++)//R、E不在首位,可以从0开始循环
{
for(E=0;
E<
E++)
{
if((P*1000+E*100+A*10+R)-(A*100+R*10+A)==(P*100+E*10+A))
cout<
P:
'
E:
A:
R:
}
}
114.(4分)一个自然数的七进制是一个三位数,而这个自然数的九进制也是一个三位数,且这两个三位数的数码顺序正好相反,求这个三位数。
inta,b,c;
//设3位数为abc;
for(a=1;
b++)//a,c出现在首位,所以不能为1,b可以为1
for(c=1;
c<
c++)
if((a*7*7+b*7+c)==(c*9*9+b*9+a))//将自然数分别用七进制和九进制表示
116.(4分)在数字圆圈中,相隔一个数字的两个数,看作是一对数。
试编程找出乘积最小的一对。
inta[20]={1,6,16,10,2,18,7,13,3,15,11,8,4,20,19,14,5,9,12,17},max=a[0]*a[2],min=a[0]*a[2],j1,k1,j2,k2;
18;
if(max<
=a[i]*a[i+2]){max=a[i]*a[i+2];
j1=i;
k1=i+2;
}//循环。
将相隔一个数的两个数乘积大小比较
if(min>
=a[i]*a[i+2]){min=a[i]*a[i+2];
j2=i;
k2=i+2;
if(max<
=a[18]*a[0]){max=a[18]*a[0];
j1=18;
k1=0;
}//由于排列为环形,所以最后两个数应该单独拿出来比较
=a[19]*a[1]){max=a[19]*a[1];
j1=19;
k1=1;
if(min>
=a[18]*a[0]){min=a[18]*a[0];
j2=18;
k2=0;
=a[19]*a[1]){min=a[19]*a[1];
j2=19;
k2=1;
最大的一对:
a[j1]<
*'
a[k1]<
='
max<
最小的一对:
a[j2]<
a[k2]<
min<
118.(5分)编程计算当x=0.5和x=1.5时下述级数和的近似值,使其误差小于某一指定值epsilon。
先找出通式,再将通式转化为编程语言。
doublef(intn)
doubles=1.0;
{doublesum=0;
intn=1;
doubleepsilon=1.0e-6;
doublex;
请输入x的值:
x;
do{
sum+=(pow(x,2*n-1)*pow(-1,n-1))/((2*n-1)*f(n-1));
n++;
}while(pow(x,2*n-1)/((2*n-1)*f(n-1))>
=epsilon);
cout<
sum<
119.(5分)编程计算下式的值。
doubles=0;
for(intk=1;
k<
k++)
s+=k;
for(k=1;
=50;
s+=k*k;
=10;
s+=1.0/k;
结果为:
122.(6分)编程计算N*N的二维数组周边元素的平均值。
{intN,s=0,x=0;
请输入N:
N;
int**a=newint*[N];
//定义二级指针,申请动态内存
if(!
a){cout<
未申请到动态内存"
return1;
{a[i]=newint[N];
a[i]){cout<
cin>
a[i][j];
//数据读取
{s+=a[0][i]+a[N-1][i];
x=x+2;
}//计算第一行和最后一行的和
for(i=1;
N-1;
{s+=a[i][0]+a[i][N-1];
}//计算第一列和最后一列的和,但是注意第一行和最后一行的那个数不用再算
平均值为:
(double)s/x<
i++)deletea[i];
//释放动态内存
deletea;
123.(6分)输入字符串,分别统计字符串中所包含的各个不同的字母及其各个字母的数量(不区分大小写)。
如:
输入字符串:
abcedabcdcd,则输出a=2b=2c=3d=3e=1
voidtongji(char*p)
{intnum[26]={0};
while(*p)
if(*p>
=65&
*p<
=90)num[*p-65]++;
elseif(*p>
=97&
=122)num[*p-97]++;
//读取字符,并将字符个数存入num[],注意大写小写的AscII码不同
p++;
26;
i++)//若出现次数大于1,则输出,否则不输出。
{if(num[i]>
0)cout<
(char)(i+97)<
num[i]<
{intn;
char*a;
n=sizeof(a)/sizeof(char);
//申请动态内存
a=newchar[n];
a){cout<
请输入字符串:
tongji(a);
208.(8分)用筛选法求出0~N(N>
0)之间的所有素数。
voidsushu(inta[],intsize)
a[0]=0;
a[1]=0;
size;
i++)//为数组中的元素赋值
{a[i]=1;
for(i=2;
(int)(size/2+0.5);
i++)//找对应元素为1的下标
{
if(a[i]==1)
for(intj=i+1;
{if(j%i==0)a[j]=0;
}//将对应下标的倍数的元素设置为0
if(a[i]==1)cout<
{intb[10];
sushu(b,10);
//函数调用
210.(10分)通过定义结构体,实现分数的有关运算(加、减、乘、除、大小比较、输入和输出)。
在加减和大小比较中,先求出分母的最小公倍数,最为分母,再根据通分法则运算,在大小比较时也可以借助减法结果的正负。
乘除法直接用运算方法。
structfenshu{
intfenzi;
intfenmu;
};
voidinput(fenshu*p1,fenshu*p2)
请输入分子和分母:
(*p1).fenzi>
(*p1).fenmu>
(*p2).fenzi>
(*p2).fenmu;
voidoutput(fenshu&
p)
{cout<
结果为:
p.fenzi<
/"
p.fenmu<
fenshujia(fenshu*p1,fenshu*p2)
{fenshut;
{intm=p1->
fenmu,n=p2->
fenmu;
if(m<
n)
{ints=m;
m=n;
n=s;
while(m%n!
=0)
{ints=m%n;
t.fenmu=p1->
fenmu*p2->
fenmu/n;
t.fenzi=(p1->
fenzi*t.fenmu/p1->
fenmu)+(p2->
fenzi*t.fenmu/p2->
fenmu);
returnt;
fenshujian(fenshu*p1,fenshu*p2)
fenmu)-(p2->
fenshucheng(fenshu*p1,fenshu*p2)
t.fenzi=(*p1).fenzi*(*p2).fenzi;
t.fenmu=(*p1).fenmu*(*p2).fenmu;
fenshuchu(fenshu*p1,fenshu*p2)
{fenshut;
t.fenzi=(*p1).fenzi*(*p2).fenmu;
t.fenmu=(*p1).fenmu*(*p2).fenzi;
voiddaxiao(fenshu*p1,fenshu*p2)
if((p1->
fenmu)>
(p2->
fenmu))cout<
第一个分数大于第二个"
elseif((p1->
fenmu)==(p2->
第一个分数等于第二个"
elsecout<
第一个分数小于第二个"
{fenshup1,p2;
fenshut1,t2,t3,t4;
input(&
p1,&
p2);
//指针调用
t1=jia(&
output(t1);
//引用
t2=jian(&
output(t2);
t3=cheng(&
output(t3);
t4=chu(&
output(t4);
daxiao(&
p2