C++编程题目算法大全文档格式.docx
《C++编程题目算法大全文档格式.docx》由会员分享,可在线阅读,更多相关《C++编程题目算法大全文档格式.docx(56页珍藏版)》请在冰豆网上搜索。
for(k=0;
k<
t;
k++)
a[k];
if(k<
t-1)cout<
"
k=0;
/*3、求Sn=a+aa+aaa+…+aa…a之值,其中a是一个数字。
例如:
2+22+222+…+22222(此时n=5),n由键盘输入。
*/
doublea,sn=0.0,sum=0.0;
intn,i;
pleaseinputanumber"
cin>
>
a;
cout<
pleaseinputnnumber"
n;
sn=a;
sum=a;
for(i=2;
=n;
{
sum=sum*10+a;
sn+=sum;
}
Sn="
sn<
/*4、一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下。
求它在第10次落地时,共经过了多少米?
第10次反弹多高?
doubleh1=100,h2=100,sum=0.0;
inti;
=10;
sum+=h2;
h1=h1/2.0;
h2=h1*2;
sum="
sum<
"
h1="
h1<
/*5、猴子吃桃问题。
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。
第二天早上又将剩下的桃子吃掉了一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,见只剩一个桃子了。
求第一天共摘了多少桃子。
intnumber,i;
number=1;
for(i=10;
i>
1;
i--)
number=(number+1)*2;
number="
number<
8.++程序中使用流格式输入、输出,我们可以怎么做?
答:
在程序的开头包含头文件iostream.h
cin输入,cout输出。
inta;
请输入a的值:
cin>
a的值为:
a<
第4章函数
/*1、写一函数用“气泡法”对输入的10个字符按由小到大的顺序排列。
inti,j,temp,a[10];
pleaseinputtennumbers:
\n"
for(i=0;
10;
a[i];
i++)//每循环一次确定数组中一个数的位置
for(j=i+1;
j++)//每次循环对比一个数的大小
if(a[i]>
a[j])
temp=a[j];
a[j]=a[i];
a[i]=temp;
resortresult="
a[i]<
/*2、用递归方法求n阶勒让得多项式的值,递归公式为
1(n=0)
Pn(x)=
x(n=1)
((2n-1)*x*Pn-1(x)-(n-1)*Pn-2(x))/n(n>
1)*/
doublefun(double,double);
doublen,x,sum;
inputnandx"
n>
x;
sum=fun(n,x);
P"
n<
("
x<
)"
="
doublefun(doublen1,doublex1)
if(n1==0)
return1;
elseif(n1==1)
return
x1;
elseif(n1>
1)
return((2*n1-1)*x1*fun(n1-1,x1)-(n1-1)*fun(n1-2,x1))/n1;
/*3、编写一函数,由实参传来一字符串,统计此字符串中字母、数字、空格、和其它字符的个数,并在主函数中输入字符串以及输出上述结果。
voidjudge(chara[]);
constintsize=100;
chara[size];
cin.getline(a,size);
judge(a);
voidjudge(chara[100])//判断字符类型
intletter=0,number=0,others=0,i=0;
while(a[i]!
='
\0'
)
if((a[i]>
a'
&
z'
)||(a[i]>
A'
))letter++;
//统计字母个数
elseif(a[i]>
0'
&
a[i]<
9'
)number++;
//统计数字个数
elseothers++;
//统计其他数个数
i++;
letter="
letter<
number="
others="
others<
/*4、给出年、月、日,计算该日是该年的第几天。
intlead(int);
intly,year,month,date,i,sum=0;
inputyear、month、date:
year>
month>
date;
inta[12]={31,0,31,30,31,30,31,31,30,31,30,31};
ly=lead(year);
if(ly==1)
a[1]=29;
//366天
elsea[1]=28;
//365天
month-1;
i++)//当前月之前所有月天数累加和
sum+=a[i];
sum+=date;
//加上当前月天数
你输入的日期是当年的第"
天"
intlead(inty)//判断闰年
if((y%4==0&
y%100!
=0)||(y%400==0))return1;
//是闰年
elsereturn0;
//不是闰年
/*5、写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入。
intcdivisor(int,int);
intcmultiple(int,int,int);
intx,y,d,m;
inputtwonumber:
x>
y;
d=cdivisor(x,y);
m=cmultiple(x,y,d);
commondivisoris"
d<
endl<
commonmultipleis"
m<
intcdivisor(intx1,inty1)//最大公约数
intr,temp;
if(x1<
y1)
temp=x1;
x1=y1;
y1=temp;
while(x1%y1)//当较大数除以较小数余数等于0时,较小数为最大公约数
r=x1%y1;
y1=r;
returny1;
intcmultiple(intx2,inty2,intd1)//最小公倍数
returnx2*y2/d1;
//两数相乘结果除以它们的最大公约数为最小公倍数
/*6、写一函数,将两个字符串连接。
string.h>
chara[size],b[size];
inputtwostring:
cin.getline(b,size);
strcat(a,b);
a="
/*7、写一函数,将一个字符串的元音字母复制到另一个字符串,然后输出。
voidscpy(char*,char*);
chara[size]="
Helloworld"
charb[size]="
Net"
a="
b="
b<
scpy(a,b);
voidscpy(char*p,char*q)
while(*q!
if(*q=='
||*q=='
e'
E'
i'
I'
o'
O'
u'
U'
*p++=*q;
q++;
/*8、写一函数,输入一个四位数字,要求输出这4个数字字符,但每两个数字间空一空格。
如输入1990,应输出“1990”。
voidouts(chara[]);
constintsize=10;
outs(a);
voidouts(chara[10])
if(strlen(a)<
=4)
4;
elsecout<
inputerror."
第5章
数组
/*1、将一个数组中的值按逆序重新存放,例如,原来顺序为:
a、b、c、d。
要求改为:
d、c、b、a。
voidback(char*);
chara[50]="
abcdefg"
back(a);
voidback(char*p)
inti=0;
while(*p!
p++;
//把指针定位到字符串末尾
//统计字符个数
for(;
0;
i--)//逆序输出
p--;
*p;
/*2、打印出杨辉三角形(要求打印出前15行)。
(杨辉三角最本质的特征是,它的两条斜边都是由数字1组成的,而其余的数则是等于它肩上的两个数之和。
)*/
voidtri(inta[][15]);
inti,j,a[15][15];
tri(a);
15;
i++)//遍历整个数组
for(j=0;
=i;
a[i][j];
if(a[i][j]>
=1&
a[i][j]<
=9)//当输出个位数之后输出4个空格保持整齐
elseif(a[i][j]>
=10&
=99)//当输出十位数之后输出3个空格保持整齐
elseif(a[i][j]>
=100&
=999)//当输出百位数之后输出2个空格保持整齐
elsecout<
//当输出百位数之后输出1个空格保持整齐
//每行输出结束后换行
voidtri(inta[15][15])
inti,j;
if(j==0||j==i)//三角形第一列和对角线被赋值为1
a[i][j]=1;
elsea[i][j]=a[i-1][j-1]+a[i-1][j];
//算出其余的数组元素
/*3、编一程序,将两个字符串连接起来,不要用strcat函数。
voidscat(char*,char*);
Hello"
Bye"
b="
scat(a,b);
afterlinkaandb"
voidscat(char*p,char*q)
)//确定数组a的插入位置
*p=*q;
/*4、打印“魔方阵”。
所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。
三阶魔方阵:
816
357
492
要求打印由1到n2的自然数构成的所有魔方阵。
//方法一:
输出N介魔方阵,但每介只输出一种。
voidsquare(inta[][10],intk,intn);
intn,i,j,k,a[10][10]={0};
inputanoddnumber:
k=n/2;
//确定第一个数列数
square(a,k,n);
\t"
voidsquare(inta[][10],intk,intn)
for(i=1,j=0;
=n*n;
i++,j--,k++)//n为阶数,从1开始给数组赋值
if(j<
0&
k>
=n)//当数组行列都越出范围时候,确定数组正确位置
j+=2;
k-=1;
elseif(j<
0)//当数组行越出范围时候,确定数组正确位置
j+=n;
elseif(k>
=n)//当数组列越出范围时候,确定数组正确位置
k-=n;
elseif(a[j][k]!
=0)//当数组原位置有数时候,确定数组位置
a[j][k]=i;
//方法二:
输出N介魔方阵所有魔方阵。
#include<
string>
iomanip>
iostream>
usingnamespacestd;
voidprintA(int**p,intn)//输出这个n阶魔方阵
下面是一个"
阶魔方阵:
for(i=0;
i<
n;
for(j=0;
j<
setw(4)<
p[i][j];
boolJudge(int**p,intn)//判断是否为n阶魔方阵
inti,j,sum=0,NowSum=0;
boolYesOrNo=true;
j++)//第一行总和
sum+=p[0][j];
for(i=1;
i++)//判断每行总和是否相等
NowSum=0;
NowSum+=p[i][j];
if(NowSum!
=sum)
YesOrNo=false;
gotoEND;
i++)//每列是否相等
NowSum+=p[j][i];
for(i=0,j=0;
n,j<
i++,j++)//主对角线是否相等
for(i=n-1,j=0;
i>
=0,j<
i--,j++)//次对角线是否相等
END:
returnYesOrNo;
voidcombination(int**p,intn,int*a)//求m=n*n个数(1,2,3.....m)的全排列
intm=n*n;
staticintNum=0;
int*b_val=newint[m];
intc=0,k,i,j;
b_val[c]=-1;
//一维数组首地址的值赋-1c[0]-1
while(b_val[0]<
m)//-1
if(++b_val[c]<
m)//分别从0开始累加每个元素值,并限制不超出最大阶数
//b[0]0[1]0[1]1[2]0[2]1[2]2...[6]6...[7]0...[7]7[8]0...[8]8判断魔方[8]9012345678
//
[7]8[8]0...[8]7判断魔方[8]8[8]9012345687
[6]7...[7]0...[7]6
[8]8012345768
//
012345786
012345867...
876543210
{
for(k=0;
k<
c;
k++)//是否与前面数字重复,如有重复元素跳出,否则使K下标等于C下标
if(b_val[k]==