}
补充:
1整形:
int
2浮点型:
flout;
3字型:
char/string,char(32)表示空格。
4enum型:
从总集中选取有限的个数作为常量,可以进行四则运算,但不可以超过取数的范围。
如:
enumdate{mon,tue,wed,thu,fri,sat,sun}如果没有给定具体数,以上七个数分别为0-6,DATE为一函数,其余七个数为常量,
再运行dated;d=mon;if(d==wed).......
5.bool型(0/1型)。
6.intx=3,;与constintx=8不同,后者定义的x为不变的常量。
字符三角形
Description:
根据字符值以及三角形的高,输出以该字符为填充字符的等腰三角形。
Input:
输入数据含有不超过50组的数据,每组包括一个可见字符c(33≤c≤126)和一个整数n(1≤n≤30)。
Output:
输出以c为填充字符,高为n的等腰三角形,每个三角形时都应另起一行。
SampleInput:
A5B3
SampleOutput:
A
AAA
AAAAA
AAAAAAA
AAAAAAAAA
B
BBB
BBBBB
代码:
#include
#include
usingnamespacestd;
intmain()
{charc;
for(intn;cin>>c>>n;)
{for(inti=1;i<=n;i++)
{for(intj=1;j<=n-i;j++)
cout<<"";
for(intk=1;k<=2*i-1;k++)
cout<cout<<"\n";}}}
优化的办法:
#include
#include
usingnamespacestd;
intmain()
{stringc;//此处也可以用charc;
for(intn;cin>>c>>n;)
{for(inti=1;i<=n;i++)
cout<//那这里就是string(2*i-1,c)了
}}
字符棱形
Description:
根据读入的字符和边长,勾画字符棱形。
Input:
输入数据含有不超过50组的数据,每组数据包括一个可见字符c和一个整数n(1≤n≤30)。
Output:
输出以c为填充字符,边长为n的棱形,勾画每个棱形时都应另起一行。
SampleInput:
A5
SampleOutput:
A
AAA
AAAAA
AAAAAAA
AAAAAAAAA
AAAAAAA
AAAAA
AAA
A
代码:
#include
#include
usingnamespacestd;
intmain()
{charc;for(intn;cin>>c>>n;)
{
for(inti=1;i<=n;i++)
cout<for(inti=n-1;i>=1;i--)
cout<}
}优化:
#include
#include//为abs()提供服务
#include
usingnamespacestd;
intmain()
{charc;
for(intn;cin>>c>>n;)
{for(inti=1-n;i<=n-1;i++)
cout<}//也就是从n-1到0再到n-1个空格,也就是从1到2*n-1再到1
//这里面的2*n-1-2*abs(i)的理解很关键,最多一行是2*n-1类推
}
交替字符倒三角形
Description:
根据读入的高,勾画ST字符交替的倒三角形。
Input:
输入数据含有不超过50个正整数n(1≤n≤30)。
Output:
输出以n为高的ST字符交替的倒三角形,勾画每个三角形时都应另起一行。
SampleInput:
10
SampleOutput:
STSTSTSTSTSTSTSTSTS
STSTSTSTSTSTSTSTS
STSTSTSTSTSTSTS
STSTSTSTSTSTS
STSTSTSTSTS
STSTSTSTS
STSTSTS
STSTS
STS
S
代码:
#include
#include
usingnamespacestd;
intmain()
{for(intn;cin>>n;)//输入行数
{for(inti=1;i<=n;++i)//确定总的循环行数
{cout<for(intj=1;j<=n-i;++j)//输出的TS的个数
cout<<"TS";
cout<<"\n";//输完一行再换行
}}}优化#include
#include
usingnamespacestd;
intmain()
{for(intn;cin>>n;)//输入行数
{for(inti=1;i<=n;++i)//确定总的循环行数
{cout<for(intj=1;j<=(n-i)*2+1;++j)//每行循环(n-i)*2-1次
cout<<(j%2?
"S":
"T");//奇数位输出S,偶数位输出T
cout<<"\n";//输完一行再换行
}}}
格式阵列一
Input:
输入数据含有不超过50个正整数n(1≤n≤25)。
Output:
输出以n为阶的格式阵列。
每行开始先打印行号,行号为两个字符宽,右对齐,行号与元素之间空2格。
每个元素占3个字符宽。
右对齐,元素值起始位置为0,以后每向右前进一个,元素值便取前一元素加1除n的余数,每进到下一行,起始的元素值为上一元素加1除以n的余数,依此类推。
每个格式阵列之间应有一空行,最前与最后不应有空行。
样本输出中,□表示空格。
SampleInput:
6SampleOutput:
□1□□□□0□□1□□2□□3□□4□□5
□2□□□□1□□2□□3□□4□□5□□0
□3□□□□2□□3□□4□□5□□0□□1
□4□□□□3□□4□□5□□0□□1□□2
□5□□□□4□□5□□0□□1□□2□□3
□6□□□□5□□0□□1□□2□□3□□4
代码:
#include
#include//为下文setw()函数做准备
usingnamespacestd;
intmain()
{for(intn,m=0;cin>>n;)
{cout<<(m++?
"\n":
"");//保证第一行与输入行分开
for(inti=1;i<=n;++i)
{cout<(2)<
inta=i;//为了保护i
for(intj=1;j<=n;++j,a++)
cout<cout<<"\n";//一行完成换行咯~
}}}
格式阵列二
Description:
根据读入的阶,按样例打印格式阵列。
Input:
输入数据含有不超过50个正整数n(1≤n≤25)。
Output:
输出以n为阶的格式阵列。
每个元素由一对括号和括号中的整数对组成,元素前应空一格。
每个元素的整数对正是该元素的行号与列号。
每个格式阵列之间应有一空行,最前与最后不应有空行。
样本输出中,□表示空格。
SampleInput:
6SampleOutput:
□(1,1)□(1,2)□(1,3)□(1,4)□(1,5)□(1,6)
□(2,1)□(2,2)□(2,3)□(2,4)□(2,5)□(2,6)
□(3,1)□(3,2)□(3,3)□(3,4)□(3,5)□(3,6)
□(4,1)□(4,2)□(4,3)□(4,4)□(4,5)□(4,6)
□(5,1)□(5,2)□(5,3)□(5,4)□(5,5)□(5,6)
□(6,1)□(6,2)□(6,3)□(6,4)□(6,5)□(6,6)
代码:
#include
usingnamespacestd;
intmain()
{for(intn,m=0;cin>>n;)
{cout<<(m++?
"\n":
"");//输入数字行与输出行换行
//等价于for(intn,m=0;cin>>n;m++)
//{if(m!
=0)cout<<"\n";}也就是第一次换行
for(inti=1;i<=n;++i)//换行n次,并进行保值i
{for(intj=1;j<=n;++j)//每列n个数,用j保值
cout<<"("<
cout<<"\n";
}}}
小结:
1.strings=”ab”;stringt=”xy”;s=s+t;cout<
2.if(a>1)cout<1)?
Cout<cout<等价于cout<<((a>1)?
X:
y);
3.%取余,/取商
4.Intn,m时,逗号仅表示同一步的先后顺序。
1!
到n!
的和
Description:
求1!
+2!
+3!
+4!
+...+n!
的结果。
Input:
输入数据含有不多于50个的正整数n(1≤n≤12)。
Output:
对于每个n,输出计算结果。
每个计算结果应占独立一行。
SampleInput:
36
SampleOutput:
9
873
代码:
#include
usingnamespacestd;
intmain()
{intt=1;
inta[12];//因为是不大于12的,所以开12个盒子
for(inti=1;i<=12;i++)
{t*=i;
a[i]=t;}//计算每一个阶乘的值(1-12)
for(intn;cin>>n;)
{intsum=0;
for(inti=1;i<=n;i++)
sum+=a[i];//累加前面算出的值,实际上a[0]没有使用
cout<}}优化
#include
usingnamespacestd;
intmain()
{inta[12]={1};//开13个数组,注意0是不用的!
,给定a[0]=1;其余是0
for(inti=1,t=2;i<=12;t*=++i+1)//也就是t=t*(i+1);i++;
{a[i]=t+a[i-1];}//计算阶乘和
for(intn;cin>>n;)
cout<}再次优化
#include
usingnamespacestd;
intmain()
{for(intn;cin>>n;)
{intsum=0;
for(inti=1,t=1;i<=n;++i)
{t=t*i;
sum+=t;}//直接判断n的值,每一个n都算一遍
cout<等比数列
Description:
已知q与n,求等比数列之和:
1+q+q2+q3+q4+…+qn
Input:
输入数据含有不多于50对的数据,每对数据含有一个整数n(1≤n≤20),一个小数q(0Output:
对于每组数据n和q,计算其等比数列的和,精确到小数点后3位,每个计算结果应占单独一行。
SampleInput:
60.351.3
SampleOutput
1.428
12.756
代码:
#include
#include//为调用pow函数准备
usingnamespacestd;
intmain()
{
doubleq;//保证q的双精度小数位
cout.precision(3);//满足小数点保留三位
for(intn;cin>>n>>q;)
{doublesum;//前后必须相同保证双精度
if(q==1)sum=1+n;//q=1时,那么就等于相加,注意第一位是一
elsesum=(pow(q,n+1)-1)/(q-1);//计算平均值,也就是用等比数列求和公式
//(pow(q,n+1)-1)表示q的n+1次-1;Sn=(1-q)^n/(1-q)。
注意n+1是由于第一项是1
cout<}
}
优化
#include
#include//为调用pow函数准备
usingnamespacestd;
intmain()
{doubleq;//保证q的双精度小数位
cout.precision(3);//满足小数点保留三位
for(intn;cin>>n>>q;)
{doublesum=1.0;//前后必须相同保证双精度
for(doublet=q;n--;t*=q)//也就是计算q的n次
sum+=t;//求和
cout<}}
菲波那契数
Description:
菲波那契(fibonacci)数(简称菲氏数)定义为:
f(0)=0;
f
(1)=1;
f(n)=f(n-1)+f(n-2).n>1的整数
如果写出菲氏数列,则应该是:
0112358132134...
如果求其第6项,则应为8。
求第n项菲氏数。
Input:
输入数据含有不多于50个的正整数n(0≤n≤46)。
Output:
对于每个n,计算其第n项菲氏数,每个结果应占单独一行。
SampleInput:
610
SampleOutput:
8
55
代码:
#include
usingnamespacestd;
intmain()
{inta[47]={0,1};//给定0-46个盒子,并默认a[0]=0,a[1]=1;
for(inti=2;i<47;++i)
a[i]=a[i-1]+a[i-2];//进行运算,i=1,2时的值已经赋值
for(intn;cin>>n;)
cout<}
最小公倍数
Description:
求两个正整数的最小公倍数。
Input:
输入数据含有不多于50对的数据,每对数据由两个正整数(0Output:
对于每组数据n1和n1,计算最小公倍数,每个计算结果应占单独一行。
SampleInput:
651812
SampleOutput:
30
36
代码:
#include
usingnamespacestd;
intgcb(inta,intb)
{if(a%b==0)returnb;returngcb(b,a%b);}//这里在寻找他们的公约数
intmain()
{
for(intn1,n2;cin>>n1>>n2;)
cout<}//比如5.6,则5/(5.6的最大公约数1)*6
最大公约数
Description:
求两个正整数的最大公约数。
Input:
输入数据含有不多于50对的数据,每对数据由两个正整数(0Output:
对于每组数据n1和n1,计算最大公约数,每个计算结果应占单独一行。
SampleInput:
651812
SampleOutput:
1
6
代码:
//本题利用辗转相除法
#include
usingnamespacestd;
intgcb(inta,intb);
intmain()
{for(intn1,n2;cin>>n1>>n2;)
cout<