}
}
return0;
}
【输入】:
5
3
【输出】:
2.3“顺”序列
【输入描述】:
输入中第一行为一个整数n(1<=n<=10),描述后面一共有n组卡片,每组卡片的第一个数m(1<=m<=100),表示后面会出现m张卡片。
【输出描述】:
输入每组卡片,判断是否能构成“顺”序列。
如果能构成“顺”序列,则输出yes,否则就输出no。
每个结果应分别不同行显示。
【程序代码】:
#include
#include
usingnamespacestd;
boolcompute(int*a,intm)
{
inti,j,max=0;
for(i=0;iif(a[i]>max)
max=a[i];
}
for(i=0;ifor(j=0;jif(a[i]+1==a[j]||a[i]==max)
break;
}
if(j>=m)
returnfalse;
}
returntrue;
}
intmain()
{
int*a;
intn=0;
intm=0;
string*b;
inti,j;
intrsize=0;
cout<<"请输入一个整数n:
";
cin>>n;
b=newstring[n];
j=0;
while(jcout<<"请输入整数m:
";
cin>>m;
a=newint[m];
cout<<"请输入一连串数据:
"<for(i=0;icin>>a[i];
if(compute(a,m))
b[j]="Yes";
else
b[j]="No";
delete[]a;
j++;
}
cout<<"输出:
"<for(i=0;icout<
delete[]b;
return0;
}
【输入】:
2
45768
81732812783
【输出】:
2.4数字和
【输入描述】:
输入数据中包含了不多于50个的正整数n
【输出描述】:
每个正整数都应输出一个各位数字和,并独占一行。
【程序代码】:
#include
#include
usingnamespacestd;
intmain(){
stringst;
while(getline(cin,st)){
intans=0;
for(inti=0;iif(st[i]>='0'&&st[i]<='9')ans+=st[i]-'0';
}
cout<}
return0;
}
【输入】:
12345
56123
82
【输出】:
五、实验小结:
本次试验重点学习了各种数据类型,逻辑运算,函数的声明,定义和调用。
在过程控制过程中,熟练地使用多重循环,同时应养成良好的编程习惯和形成自己的编程风格,一边为日后的学习打下坚实的基础。
实验三、加密和解密算法实验
一、实验目的
1、重视数学方法,提高数学推算和编程表的转换能力。
2、拓展编程表达的方法,熟练运用函数等手段进行计算模块的分离计算。
3、进一步学会使用c++标准库;
4、在保证编程程序正确的条件下,关注数据结构和算法,改进效率。
二、实验设备与环境
装有C++语言工具软件(Vs2008)的计算机。
三、实验内容
a)P.98,7.2.1,密钥加密;
b)P.99,7.2.2,密钥解密;
4、实验过程及结果
3.1密钥加密
【实验代码】:
#include
#include
usingnamespacestd;
intmain()
{while
(1){
charkey[100],data[101];
cin.getline(key,100);
cin.getline(data,100);
cout<inti=0,j=0;
for(i=0;ifor(j=0;jif(i>=strlen(data))
break;
data[i]+=key[j]-'0';
if(data[i]>122)
data[i]=data[i]-123+32;
i++;
}
i-=1;
}
cout<}
return0;
}
【输入】:
4972863
Theresultof3and2isnot8
123
Helloworld
【输出】:
3.2密钥解密
【实验代码】:
#include
#include
usingnamespacestd;
intmain()
{
while
(1){
charkey[100],data[101];
cin.getline(key,100);
cin.getline(data,100);
cout<cout<inti=0,j=0;
for(i=0;ifor(j=0;jif(i>=strlen(data))
break;
data[i]-=key[j]-'0';
if(data[i]<32)
data[i]=data[i]-32+123;
i++;
}
i-=1;
}
cout<}
return0;
}
【输入】:
4972863
xql”zkvyu“wl#7)hpl”5$rx”vuw$A
123
Igomq#Xqumf
【输出】:
五,实验小结:
通过本次实验,对加密解密有一定的了解,密钥加密就是将密钥数字串值循环加到明文上,使得明文不可阅读,解密就是加密的反过程。
实验中,遇到一些问题,字符串的读入和输出以及循环表达式的设计,通过查阅资料和上网查阅,最后算是解决问题。
实验四、数字算法实验
一、实验目的
1、重视数学方法,提高数学推算和编程表的转换能力。
2、拓展编程表达的方法,熟练运用函数等手段进行计算模块的分离计算。
3、进一步学会使用c++标准库;
4、在保证编程程序正确的条件下,关注数据结构和算法,改进效率。
二、实验设备与环境
装有C++语言工具软件(Vs2008)的计算机。
三、实验内容
a)P.102,7.3.1,n!
的位数;
b)P.103,7.3.2,排列对称串;
c)P.103,7.3.3,勒让德多项式表;
d)P.104,7.3.4,立方数和连续奇数和;
4、实验过程及结果
4.1n!
的位数
【基本描述】:
针对每个非负整数n,计算n!
的位数
【输入描述】:
输入数据中含有一些整数n(0<=n<10^7)
【输出描述】:
根据每个整数n,输出n!
的位数,每个数占独立一行。
【主要代码】:
#include
#include
usingnamespacestd;
intmain()
{
doubleN,logV;
inti;
while(cout<<"输入N的值:
"&&cin>>i)
{
N=i;
for(i=1,logV=0;i<=N;i++)
{
logV+=log(1.0*i);
}
logV/=log(10.0);
cout<的位数:
"<<(int)(logV+1)<}
return0;
}
【输入】:
56
【输出】:
4.2排列对称串
【基本描述】:
一些字串,有些是对称的,有些是不对称的。
请将那些对称的字串按从小到大的顺序输出。
字串先以长度论大小,如果长度相同,再以ASCII码值大小为标准。
【输入描述】:
输入数据中含有一些字串(1<=串长<=256)
【输出描述】:
根据每个字串,输出对称的那些串,并且要求按从小到大的顺序输出。
【代码如下】:
#include
#include
#include
#include
#include
usingnamespacestd;
boolComp(conststring&s1,conststring&s2)
{
returns1.length()!
=s2.length()?
s1.length()s1}
intmain(intargc,char*argv[])
{
vectorv;
stringt,s;
while(cin>>s)
{
t=s;
reverse(t.begin(),t.end());
if(t==s)
{
v.push_back(s);
}
if(cin.get()=='\n')
{
break;
}
}
sort(v.begin(),v.end(),Comp);
for(inti=0;i{
cout<}
system("pause");
return0;
}
【输入】:
123321
123454321
123
321
sdfsdfd
121212
\\dd\\
【输出】:
4.3勒让德多项式表
【基本描述】:
数学poly函数的展开式也称关于x的n阶勒让德多项式,它的递推公式为:
给定x,请计算n阶勒让德多项式的值。
【输入描述】:
输入数据中含有一些浮点数x(0【输出描述】:
对于每个x,分别计算2阶,3阶,4阶,5阶,6阶的勒让德多项式的值,其每个值的精度为6位小数。
输出时,先列出x的值,保留3位小数精度,然后每输出一个阶值之前,都空出2格,由此一字排开,形成一张多项式表
【代码如下】:
#include
#include
usingnamespacestd;
doublepoly(intn,doublex);
intmain()
{inti=0;
for(doublex;cin>>x;){
if(i==0){
cout<<"xp2(x)p3(x)p4(x)p5(x)p6(x)"<i=1;
}
cout<for(inti=2;i<=6;i++){
cout<}
cout<}
}
doublepoly(intn,doublex){
if(n==0)
return1;
if(n==1)
returnx;
return((2*n-1)*x*poly(n-1,x)-(n-1)*poly(n-2,x))/n;
}
【输入】:
0.20.30.35
【输出】:
4.4立方数与连续奇数和
【基本描述】:
一个整数的立方数,可以表示为连续奇数的和,例如:
3^3=7+9+11
4^3=13+15+17+19
针对每个正整数n,输出表示其立方数的连续奇数和
【输入描述】:
输入数据中含有一些整数n(1<=n<=100)
【输出描述】:
根据每个整数n,输出其值等于n^3的连续奇数和
【代码如下】:
#include
usingnamespacestd;
intmain() {
inti,n,j,a[5];
cin>>n;
for(i=0;i cin>>a[i];
}
for(i=0;i intm=a[i]*a[i]-a[i]+1;
for(j=0;j cout< m+=2;
}
cout< }
return0;
}
【输入】:
348
【输出】:
4.5斐波那契数
【基本描述】:
根据输入数据中的n,输出第n项斐波那契数。
【输入描述】:
输入数据中含有一些整数n(0<=n<=46)
【输出描述】:
根据每个整数n,输出其第n项斐波那契数,每个数独占一行。
【代码如下】:
#include
#include
usingnamespacestd;
intmain(){
intn;
vectorv;
v.push_back(0);
v.push_back
(1);
for(intk=2;k<=46;++k)
v.push_back(v[k-1]+v[k-2]);
while(cin>>n)
cout<return0;
}
【输入】:
5678940
【输出】:
五,实验小结:
本次试验第一,三,五题均使用递归算法,即程序自己调用自己的编程技巧。
在使用递归时,要有递归边界条件,递归前进段和递归返回段。
当边界条件不满足时,递归前进,当边界条件满足时,递归返回。
应该熟练掌握递归算法的用法。
第二题中,排序比较函数的具体方法是,判断参与比较的没两个字符串的长度是否相等,若不相等则按长度从小到大的顺序返回;若相等则以ASCII码值为排序标准,即按字符串从小到大排序。
第四题中,立方数表示为连续的奇数和。
n个连续的奇数,假设第一个奇数为x,那么第n个奇数就是x+(2n-2) 。
n个连续奇数的和就等于x+(x+2)+...+(x+(2n-2))=(x+n-1)*n。
正整数n的立方可以表示为n个连续奇数的和
就可以变成 n*n*n=(x+n-1)*n->n*n=x+n-1->x=n*n-n+1 。
实验五、大数运算算法实验
一、实验目的
1、重视数学方法,提高数学推算和编程表的转换能力。
2、拓展编程表达的方法,熟练运用函数等手段进行计算模块的分离计算。
3、进一步学会使用c++标准库;
4、在保证编程程序正确的条件下,关注数据结构和算法,改进效率。
二、实验设备与环境