计算机考研机试编程题代码核心总结

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'变成整型。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值