1.a+aa+aaa+aaaa...
intx=0; x=x*10+a;
inty=0; y+=x;
2.反序输出, n=1234; 输出4321
intx=0; x=x*10+ (n%10);
n/=10;
3.十进制转二进制
//输入的是十进制数n,int型,输出为二进制,定义一个int型数组a[100]用于输出01
inta[100]; a[i] =n%2;
n/=2; sum++;
//逆序输出
for(inti=sum-1;i>=0;i--){};
①建立int型数组输出二进制数②逆序输出
4.二进制转十进制
//输入为二进制数,用char[]接收,输出为十进制,int型n输出
if(a[i] =='0') {n=n*2;}
else {n=n*2+1;}
注意‘0’中的单引号不能少
5.矩阵顺时针旋转90°
for(inti=0;i<n;i++){
for(intj=0;j<m;j++){
b[j][m-i-1] =a[i][j];//核心,注意a,b位置不可换
}
}
6. 杨辉三角形
a[0][0] =1;
for(inti=1;i<n;i++){//行,从第二行开始
for(intj=0;j<n;j++){//列
a[i][j] =a[i-1][j] +a[i-1][j-1];
}
}
7.年月日对应天数
创建一个结构体包含年月日三个元素
创建一个f[13]对应每月的天数
能被4整除但不能被100整除||能被400整除的年份为闰年
定义一个flag判断月、日的输入是否合法
sum = day; sum += f[i];
8.字符串中每个字母在总串中的出现次数
for(inti=0;i<lm;i++){//小串在外
intsum=0;
for(intj=0;j<ln;j++){//大串在内,小串中每个字母依次和大串比较
if(m[i] ==n[j]){
sum++;
}
}
cout<<m[i]<<"出现的次数为:"<<sum<<endl;
}
//目前发现有一个缺点,小串中重复的字母会多次输出
9.字符串出现次数
for(inti=0;i<lb;i++){//大串在外
intflag=0;
for(intj=0;j<la;j++){//小串在内,注意与上面统计单个字符的区别
if(a[j] !=b[i+j]){
flag=1;//一个字母不同就pass
}
}
if(flag==0){
sum++;
}
}
10.首字母大写
intflag=0;
for(inti=0;i<len;i++){
if((flag==0)&&a[i] !=' '){
if(a[i]>='a'&&a[i]=<'z'){
a[i] -=32;//小写字母和大写字母之间的差值是32
}
flag=1;//很关键,保证后面的字母仍是小写
}
elseif(a[i] ==' '){
flag=0;//遇到空格后下一个单词的首字母进入上述条件语句
}
}
11.sort排序及冒泡排序
boolcmp(inta,intb){
if(a%2==b%2){
returna<b;
}
else{
return (a%2) > (b%2);//奇数在前,偶数在后
}
}
//冒泡
//外层循环次数等于元素个数减1
for(inti=0;i<len-1;i++){
//内层循环次数=元素个数-当前轮数-1
for(intj=0; j<len-i-1;j++){
if(arr[j]>arr[j+1]){
inttemp=arr[j];
arr[j] =arr[j+1];
arr[j+1] =temp;
}
}
}
12.字符串删除
for(inti=0;i<lb;i++){
intflag=0;
for(intj=0;j<la;j++){
if(a[j] !=b[i+j]){//字符串匹配
flag=1;
}
}
if(flag==0){//找到目标字符串
for(intj=i;j<i+la;j++){//i+la
f[j] =1;//定义一个f[100],给欲删除字符串元素赋1,输出时只输出f[]=0的元素
}
}
}
13.统计子串个数
14.完全数
for(inti=2;i<n;i++){
intsum=1;//包括因子1
for(intj=2;j<i;j++){
if(i%j==0){
sum+=j;
}
}
if(sum==i){
cout<<sum<<" ";
}
}
15.一些数学公式
//最大公约数gcd(x,y)
intgcd(inta, intb) {
if (b==0) returna;
elsereturngcd(b, a%b);
}
//最小公倍数 = a*b/最大公约数
//斐波那契数列:1,1,2,3,5,8,13,21,34...,
//f[n] = f[n-1] + f[n-2];一般先给f[1],f[2]赋值👇
intf(intn){
if(n<=1) return1;
elsereturnf(n-1) +f(n-2);
}
//错排公式:n本书,重排后每本书都不在原来的位置,有几种摆法
//D(n) = (n-1)*[D(n-1)+D(n-2)],同样,先把前几项值显示给出
//海伦公式
//S = sqrt(p*(p-a)*(p-b)*(p-c)),sqrt()意为开根号
//a,b,c为三角形三边长,p为半周长,S为面积
16.switch, case应用加减乘除
switch(c){
case'+':
cin>>b;
cout<<a+b<<endl;
break;//break必不可少
case'-':
cin>>b;
cout<<a-b<<endl;
break;
case'*':
cin>>b;
cout<<a*b<<endl;
break;
case'/':
cin>>b;
if(b==0) break;
elsecout<<a/b<<endl;
break;
case'%':
cin>>b;
if(b==0) break;
cout<<a%b<<endl;
break;
case'!'://阶乘的输出方式
inttemp=1;
for(inti=1;i<=a;i++){
temp=temp*i;
}
cout<<temp<<endl;
break;
}
👆注意格式:switch()括号里是一个条件,case 'x' : 注意单引号和冒号的使用,break不可省。
17.结构体排序
structnode{
intweight;
charcolor[10];
}x[10];
boolcmp(nodea,nodeb){//要想使用结构体类型的sort,定义的cmp参数也需是结构体类型
returna.weight>b.weight;
}
==sort(x,x+n,cmp);==
//成绩排序,由低到高,对于成绩相同的同学按学号由低到高
structnode{
intnum;
intscore;
};
boolcmp(nodea,nodeb){
if(a.score==b.score){//成绩相同,按学号由低到高排列
returna.num<b.num;
}
else{//成绩不同,按成绩由低到高排列
returna.score<b.score;
}
}
==sort(a,a+n,cmp);==
18.矩阵乘积
//a是n*m矩阵,b是m*n矩阵,乘积c是n*n矩阵
for(inti=0;i<n;i++){
for(intj=0;j<n;j++){
for(intk=0;k<m;k++){//注意这个k的巧妙用法
c[i][j] +=a[i][k]*b[k][j];
}
}
}
19.字符串加密
chara[100];
while(gets(a)){//字符串整体输入输出用gets,cin有遇空格停止的问题
intlen=strlen(a);
for(inti=0;i<len;i++){
if((a[i]>='A')&&a[i]<='Z'){
a[i] =a[i]+3;
if(a[i] >'Z'){//一定要写在里面,判断+3后是否发生溢出
a[i] =a[i] -26;//溢出则-26实现循环
}
}
}
puts(a);
}
字符串整体输入可用getline(cin,str),cin有遇到空格就停止读入的问题
20.字符串反码
for(inti=0;i<len;i++){
if((a[i]>='a')&&a[i]<='z'){
b[i] ='z'+'a'-a[i];
}
elseif((a[i]>='A')&&a[i]<='Z'){
b[i] ='Z'+'A'-a[i];
}
elseb[i] =a[i];
}
任何字符型变量参与运算(加、减、比大小)时,字母都要加单引号
21.与7无关的数
intflag=0;
if((i%7==0)||(i/10==7)||(i%10==7)){//7的倍数、个位为7、十位为7
a[i] =0;//相关则以0存储
flag=1;
22.结构体查询
structnode{
intnum;
stringname;//不能用char,因为char只定义一个元素时,这个元素只能包含一个字符
//要真想用char,要用char定义一个数组,用于接收姓名
stringsex;//性别是一个汉字,汉字用char表示需两个字符
intscore;
}a[n];
23.判断三角形类型
/*分为五种情况
1:三边相等或者两条长边相等,锐角三角形
2:两条短边相等,钝角三角形
3:a*a + b*b = c*c,直角三角形
4:a*a + b*b > c*c,锐角三角形
5:a*a + b*b < c*c,钝角三角形
*/
好的解题方法是在输入三个数后,对其进行排序(a短b中c长),方便后续比较。
24.判断是否拥有平方因子
doubleb[100] = {0};//必须要用double,防止5/2=2这种情况发生。
for(inti=2;i<=n;i++){
if(n%i==0){
b[i] =i;//记录因数
}
}
intflag=0;
for(inti=2;i<100;i++){
for(intj=0;j<100;j++){
if(b[j]/i==i){
cout<<"Yes"<<endl;
flag=1;
break;//break只能跳出一层循环
}
}
if(flag==1)break;
}
if(flag==0){
cout<<"No"<<endl;
}
注意这里double的使用,以及flag的灵活使用
25.结构体案例及随机数种子
#include<iostream>
#include<string>
#include<ctime>
#include<stdlib.h>
usingnamespacestd;
structStudent{
stringsName;
intscore;
};
structTeacher{
stringtName;
structStudentsArray[5];
};
voidallocateSpace(structTeachertArray[],intlen){
stringnameSeed="ABCDE";
for(inti=0;i<len;i++){
tArray[i].tName="Teacher_";
tArray[i].tName+=nameSeed[i];
for(intj=0;j<5;j++){
tArray[i].sArray[j].sName="Student_";
tArray[i].sArray[j].sName+=nameSeed[j];
intrandom=rand()%61+40;
tArray[i].sArray[j].score=random;
}
}
}
printInfo(TeachertArray[],intlen){
for(inti=0;i<len;i++){
cout<<"老师姓名: "<<tArray[i].tName<<endl;
for(intj=0;j<5;j++){
cout<<"\t学生姓名: "<<tArray[i].sArray[j].sName<<
" 考试分数: "<<tArray[i].sArray[j].score<<endl;
}
}
}
intmain(){
//随机数种子
srand((unsignedint)time (NULL));
TeachertArray[3];
intlen=sizeof(tArray)/sizeof(tArray[0]);
allocateSpace(tArray,len);
printInfo(tArray,len);
system("pause");
return0;
}
26.后缀子串排序
stringstr;
cin>>str;//不输入空格用cin,有空格需要输入就用getline(cin,str);
intlen=str.length();
stringa[len];//定义一个字符串型数组,相当于char的二维数组
for(inti=0;i<len;i++){
a[i]=str.substr(i);//获得len个子串
}
sort(a,a+len);//sort会按各str首字母排序
a[i]=str.substr(i); //取str字符串第i位及以后字符
sort可以对字符串型数组排序,比较的是首字母
27.拆分字符串
chara[100],b[100];//不要动原字符串,新建两个字符串分别接收字母和数字
intsum1=0,sum2=0;//不要靠筛选a,b串中元素输出,想办法从头到脚输出
for(inti=0;i<len;i++){
if(str[i]>='a'&&str[i]<='z'){
a[sum1] =str[i];
sum1++;
}
else{
b[sum2] =str[i];
sum2++;
}
}
28.字符串指定区间翻转
stringa,b;//要新建一个字符串b接收,因为a本身要变,一个字符串不行
intp,q;
cin>>a>>p>>q;//对于这里的输入,只要遇到空格字符串输入就停止了
intlen=a.length();
for(inti=0;i<len;i++){
if(i>=(p-1)&&i<=(q-1)){
b[i] =a[p+q-2-i];//通过练习本手写找规律
}
else{
b[i] =a[i];
}
}
29.随机数和时间戳
#include<iostream>
#include<cstdlib>//随机数
#include<ctime>//给时间
usingnamespacestd;
intmain(){
srand((unsigned)time(0));
for(inti=0;i<100;i++){
inta=rand()%100;//随机数范围为0~99
cout<<a<<endl;
}
return0;
}
30.爬楼梯(动态规划)
//爬楼梯,先把开头的结果写出来,再利用递归求解
#include<iostream>
usingnamespacestd;
intf(intn){
if(n==1) return1;//1阶台阶只有一种上法
if(n==2) return2;//2阶台阶有两种上法
elsereturnf(n-1) +f(n-2); //上n阶台阶的方法是上n-1和n-2阶台阶的方法之和
}
intmain(){
intn;
while(cin>>n){
cout<<f(n)<<endl;//注意一下形式
}
return0;
}
31.球的半径和体积
#include <iostream>
#include <cmath>
usingnamespacestd;
intmain() {
doublex0,y0,z0,x1,y1,z1;
while(cin>>x0>>y0>>z0>>x1>>y1>>z1){
doubler ,v;
r=sqrt((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0)+(z1-z0)*(z1-z0));
v=4*acos(-1)*r*r*r/3;
printf("%.3lf %.3lf\n",r,v);//注意这里的输出格式
}
return0;
}
C++中 派 = acos(-1)
scanf("%f",&f);代表输入单精度浮点型(float),printf("%.3lf",d);表示输出双精度浮点型(double)保留三位小数
32.进制强制转换
#include <iostream>
usingnamespacestd;
intmain(){
intn;
while(cin>>hex>>n){//hex强制转换成十六进制输入
cout<<dec<<n<<endl;//dec强制转换成十进制输出
}
return0;
}
//bin强制转换成二进制,oct强制转换成八进制
33.😊skew数😡
#include <iostream>
#include <cstring>
usingnamespacestd;
intmain() {
stringa;
while(cin>>a){
intlen=a.length();
intsum=0;
intb[len];
for(inti=0;i<len;i++){//读入的顺序是字符串顺序从左到右,跟我们平时的计算习惯不同
intx=1;
for(intj=(len-1-i);j>=0;j--){//阶码从左到右依次减小
x*=2;
}
x=x-1;
b[i] = (a[i] -'0') *x;//字型a[i]减'0'变成整型
}
for(inti=0;i<len;i++){
sum+=b[i];
}
cout<<sum<<endl;
}
return0;
}
🐻二进制各位阶乘问题,字符串的位从左到右依次增大,而二进制位的阶码从左到右依次减小。
🤯字型a[i]减'0'变成整型。