摘要
整理最近四年内的复试笔试题,2016-2019
2019年
(前五题一道题10分 后两题一道题15分)
-
输入10个人的成绩,计算平均分,记录低于平均分的人数,并将他们的成绩输入到一个数组中。
#include <iostream> using namespace std; int main() { float stu[10],mean,s[10]; int g,k=0; for(int i=0;i<10;i++){ cin>>g; stu[i]=g; mean+=g/10; } for(int i=0;i<10;i++){ if(stu[i]<mean){ s[k]=stu[i]; k++; } } return 0; }
-
使用递归方法从数组中找出最大值。
using namespace std; /* int f(int a[], int n) { if (n > 1) { int t; t = f(a, n - 1); return (t > a[n - 1]) ? t : a[n - 1]; } else return a[0]; } */ int getMax(int *a,int n){ if(n==1){ return a[0]; } int t=getMax(a,n-1); if(a[n-1]>t){ return a[n-1]; }else{ return t; } } int main() { int a[]={1,4,3,5,6,87,3,23,6,78,9}; //int max=f(a,11); int max=getMax(a,11); cout<<max; return 0; }
-
求解一元二次方程组(三种情况)。
#include <iostream> #include <cmath> using namespace std; int main() { double a , b, c; cin>>a>>b>>c; if (a==0) { cout<<"不是一元二次方程\n"<<endl; } else { double disc = b*b-4*a*c; if(disc == 0) { cout<<"x="<<-b/(2*a); } else if ( disc > 0) { cout<<"x1="<<(-b+sqrt(disc))/(2*a)<<endl; cout<<"x2="<<(-b-sqrt(disc))/(2*a)<<endl; } else { cout<<"有两个共轭的复根"<<endl; } } return 0; }
-
输入字符串和一个数字,并将字符串以数组方式存储并进行平移操作, 如abdcf 向前平移2个 变成dcfab。
#include <iostream> #include <string.h> using namespace std; void move2(char *s , int n,int k){ char t=s[n-1]; for(int i=n-1;i>0;i--){ s[i]=s[i-1]; } s[0]=t; k--; if(k>0) move2(s,n,k); } void move(char *str,int m) { int i = 0; int j = 0; char temp; int len = strlen(str); //循环向后移动m次 for(i = 0;i < m;i++) { //向后移动一次 temp = str[0]; for(j = 1;j < len;j++) { str[j-1] = str[j]; } str[len-1] = temp; } } int main() { char s[100]={0}; int n,k; cin>>n>>k>>s; move2(s,n,k); cout<<s; return 0; }
-
用二维数组实现矩阵乘法,输入两个矩阵Axy, Bxy,求A*B=C。
#include <iostream> using namespace std; #define SIZE_M 2 #define SIZE_N 3 #define SIZE_S 4 int main(){ int matrix_a[SIZE_M] [SIZE_N]={{1,2,3},{4,5,6}};//a矩阵2X3 int matrix_b[SIZE_N] [SIZE_S]={{1,2,3,4},{5,6,7,8},{1,2,3,4}};//b矩阵3X4 int matrix_result[SIZE_M][SIZE_S];//结果矩阵2X4 for(int m=0;m<SIZE_M;m++){ for(int s=0;s<SIZE_S;s++){ matrix_result[m][s]=0;//变量使用前记得初始化,否则结果具有不确定性 for(int n=0;n<SIZE_N;n++){ matrix_result[m][s]+=matrix_a[m][n]*matrix_b[n][s]; } } } for(int m=0;m<SIZE_M;m++){ for(int s=0;s<SIZE_S;s++){ cout<<matrix_result[m][s]<<"\t"; } cout<<endl; } return 0; }
-
输入工人的工资,要求工资从小到大进行排序,并以链表的形式进行存储并输出。
#include <iostream> using namespace std; typedef struct LNode { int data; // 数据域(可以是其他类型) struct LNode *next;//指针域 (此处代表指向后驱节点) }LNode,*LinkList; LinkList CreatList(LinkList &L){//尾插法建表,输入9999结束 int x; //L=(LinkList)malloc(sizeof(LNode));//c的做法 L=new LNode; LNode *s,*r=L; cin>>x; while(x!=9999){ s=new LNode; s->data=x; r->next=s; r=s; cin>>x; } r->next=NULL; return L; } void Print(LinkList &L) { //输出链表中的数据 LNode *p = L->next; while (p != NULL) { cout << p->data << " "; p = p->next; } cout << endl; } void Sort(LinkList &L) { //采用头插法 LNode *p = L->next, *pre; LNode *r = p->next; p->next = NULL; p = r; while (p!=NULL) { r = p->next; pre = L; while (pre->next != NULL&&pre->next->data < p->data) { pre = pre->next; } p->next = pre->next; pre->next = p; p = r; } } int main() { LNode *L = new LNode; //新建结点,并且创建指针 L=CreatList(L); Sort(L); Print(L); return 0; }
-
快速排序。
#include <iostream> using namespace std; int Partition(int a[],int low,int high){ int p=a[low]; while(low<high){ while(low<high&&a[high]>=p) --high; a[low]=a[high]; while(low<high&&a[low]<=p) ++low; a[high]=a[low]; } a[low]=p; return low; } void QuickSort(int a[],int low,int high){ if(low<high){ int p=Partition(a,low,high); QuickSort(a,low,p-1); QuickSort(a,p+1,high); } } int main() { int a[]={1,2,4,6,9,7,6,3,4,8}; QuickSort(a,0,9); for(int i=0;i<10;i++){ cout<<a[i]<<" "; } return 0; }
2018年
-
输入俩个数,找到之间的偶数求和
#include <iostream> using namespace std; int main() { int m,n,sum=0; cin>>m>>n; for(int i=m;i<n;i++){ if(i%2==0) sum+=i; } cout<<sum<<endl; return 0; }
-
1+2+2+3+3+3+…+n+n+......+n求和
#include <iostream> using namespace std; int main() { int n,sum=0; cin>>n; for(int i=1;i<=n;i++) sum+=i*i; cout<<sum<<endl; return 0; }
-
迭代求平方根 给一个迭代式 让你求 他的平方跟
#include <iostream> #include <cmath> using namespace std; int main() { float a,x0,x1; cin>>a; x0=a/2; x1=(x0+a/x0)/2; do{ x0=x1; x1=(x0+a/x0)/2; } while(fabs(x0-x1)>=1e-5); cout<<x1<<endl; return 0; }
-
把文件里面的信息读入 然后80个字符是一行 统计行数 小写字母 大写字母 数字的个数
#include <iostream> #include <fstream> using namespace std; int letter=0,digit=0,space=0,others=0; void strcount(char str[]){ int i; for (i=0; str[i]!='\0'; i++) if ((str[i]>='a'&& str[i]<='z')||(str[i]>='A' && str[i]<='Z')) letter++; else if (str[i]>='0' && str [i]<='9') digit++; else if (str[i]==32) space++; else others++; } //p1067 int main() { char buffer[256]; fstream out; int line=0; out.open("test.txt",ios::in); cout<<"test.txt"<<" 的内容如下,回车显示统计内容:"<<endl; while(!out.eof()) { out.getline(buffer,256,'\n');//getline(char *,int,char) 表示该行字符达到256个或遇到换行就结束 cout<<buffer<<endl; strcount(buffer); line++; } out.close(); cin.get();//cin.get() 是用来读取回车键的,如果没这一行,输出的结果一闪就消失了 cout<<"line:"<<line<<" letter:"<<letter<<" digit:"<<digit<<" space:"<<space<<" others:"<<others<<endl; }
-
有一道是输入123 输出 每一位的个数 而且输出顺序是3 2 1 用递归
#include <iostream> using namespace std; void Print(int n){ if(n==0) return; cout<<n%10<<" "; Print(n/10); } int main() { int n; cin>>n; Print(n); return 0; }
-
考选择排序
#include <iostream> using namespace std; void SelectSort(int a[],int n){ int min,t; for(int i=0;i<n-1;i++){ min=i; for(int j=i+1;j<n;j++) if(a[j]<a[min]) min=j; if(min!=i){ t=a[i]; a[i]=a[min]; a[min]=t; } } } int main() { int a[]={1,3,4,5,2,9,7,5}; SelectSort(a,8); for(int i=0;i<8;i++){ cout<<a[i]<<" "; } return 0; }
-
是考杨辉三角的 (a+b)n次方 方程的展开后的各项系数
#include <iostream> using namespace std; int main() { int n,i,j; int a[20][20]={0}; cout<<"输入小于20的n:"; cin>>n; for(i=0;i<n;i++){ a[i][n-1-i]=1; a[i][n-1]=1; } for(i=2;i<n;i++) for(j=n-2;j>n-1-i;j--){ a[i][j]=a[i-1][j]+a[i-1][j+1]; } for(i=0;i<n;i++) for(j=0;j<n;j++){ cout<<a[i][j]<<" "; if(j==n-1)cout<<endl; } return 0; }
-
是一个链表的删除
问题不清楚,当作删除值为x的节点
建表打印表来自2019.6#include <iostream> using namespace std; typedef struct LNode { int data; // 数据域(可以是其他类型) struct LNode *next;//指针域 (此处代表指向后驱节点) }LNode,*LinkList; LinkList CreatList(LinkList &L){//尾插法建表,输入9999结束 int x; //L=(LinkList)malloc(sizeof(LNode)); L=new LNode; LNode *s,*r=L; cin>>x; while(x!=9999){ s=new LNode; s->data=x; r->next=s; r=s; cin>>x; } r->next=NULL; return L; } void Print(LinkList &L) { //输出链表中的数据 LNode *p = L->next; while (p != NULL) { cout << p->data << " "; p = p->next; } cout << endl; } //删除所有值为x的节点 void deleteX(LinkList &L, int x){ LNode *p=L->next,*pre=L,*q; while(p!=NULL){ if(p->data==x){ q=p; p=p->next; pre->next=p; delete q;//C语言用 free(q); } else{ pre=p; p=p->next; } } } int main() { LNode *L = new LNode; //新建结点,并且创建指针 L=CreatList(L); deleteX(L,1); Print(L); return 0; }
2017年
-
是判断一个序列是否是升序,是则输出yes,不是则输出no
#include<iostream> using namespace std; int main() { int a[600] = {0}; int i; for(i=0;i<600;i++){ //输入数字序列 cin>>a[i]; if(a[i]==-1) break; } for(i=1;i<600;i++){ //判断是否升序 if(a[i]==-1) break; if(a[i]<=a[i-1]) break; } if(a[i]==-1) //输出判断结果 cout<<"YES"<<endl; else cout<<"NO"<<endl; return 0; }
-
整数转化为字符串 分离各位+‘’变字符
#include<iostream> using namespace std; int getAnswer(int n) //计算与7有关的数字个数 { int i,cnt=0; for(i=1;i<=n;i++){ //循环n以内的所有数 if(i%7==0) //如果当前数是7的倍数,计数+1 cnt++; else{ int t = i; while(t){ if(t%10==7){ //如果当前数的某一位是7,计数+1 cnt++; break; } t/=10; } } } return cnt; } int main() { int n; cin>>n; cout<<getAnswer(n)<<endl; return 0; }
-
是输入一个数判断是不是回文数,例如101,12121之类
#include<iostream> #include<string.h> using namespace std; int isHuiwen(char num[]) //判断是否是回文数 { int i,len = strlen(num); for(i=0;i<len;i++) //前后依次对比每一位数字,遇到不相等的情况,退出循环 if(num[i]!=num[len-i-1]) break; if(i<len) return 0; else return 1; } int main() { char num[1000]={0}; cin>>num; if(isHuiwen(num)) //输出判断结果 cout<<"YES"<<endl; else cout<<"NO"<<endl; return 0; }
-
是输入两个字符串,其中一个逆序后接在第一个字符串之后,并输出
#include<iostream> #include<string.h> using namespace std; void mycat(char str1[],char str2[]) { int i = strlen(str2)-1; int j = strlen(str1); for(;i>=0;i--) //逆序连接 str1[j++] = str2[i]; str1[j] = '\0'; } int main() { char str1[1100] = {0}; char str2[1100] = {0}; cin>>str1; //输入两个字符串 cin>>str2; mycat(str1,str2); //逆序连接 cout<<str1<<endl; //输出连接后的结果 return 0; }
-
是输入两个数m,n。然后输入一个m进制字符串,将其转化为n进
#include<iostream> #include<string.h> using namespace std; int toTen(int m,char s[]) //将m进制的数字串转换为十进制并返回 { int i,d = 1,num = 0; for(i=strlen(s)-1;i>=0;i--){ //循环该数字串,将每一位上的位值和位权相乘,累加结果便为对应的十进制数 int t; if('a'<=s[i] && s[i]<='z') t = int(s[i]-'a'+10); else t = int(s[i]-'0'); num+=t*d; d*=m; } return num; } void toN(int num,int n,char ans[]) //将十进制数num转换为n进制数,并存储在ans数组中 { int i=0; char temp[1100] = {0}; while(num){ //辗转相除法 int yu = num%n; num/=n; if(yu>9) temp[i++] = char(yu-10+'a'); else temp[i++] = char(yu+'0'); } int len = i; for(i=i-1;i>=0;i--) ans[len-i-1] = temp[i]; ans[len] = '\0'; } int main() { int m,n; char s[1100] = {0}; char ans[1100] = {0}; cin>>m>>n; //输入m和n,以及m进制的数字串 cin>>s; int num = toTen(m,s); //将m进制的数字串转换为十进制数 toN(num,n,ans); //将十进制数转换为n进制数 cout<<ans<<endl; //输出转换后的结果 return 0; }
-
是输入一个正整数n,输出一个蛇形矩阵,就是按照之字形排列小于等于n的数数字大小顺序是按之字形排列的,是斜着的。符串并输出。(蛇形矩阵)
include <iostream> using namespace std; # 通过标记上次的变化方式决定这次的变化,变化包括向右,向下,左下和右上四种情况 int main() { int a[10][10]={0};int i=0,j=0; int n;cin>>n; //0向右1左下2向下3右上 a[i][j]=n;a[i][++j]=n-1;int t=0; for(int k=n-2;k>0;k--){ if(t==0) {a[++i][--j]=k;t=1; else if(t==1){ if(j==0){ a[++i][j]=k;t=2; }else{ a[++i][--j]=k;t=1; } } else if(t==2){ a[--i][++j]=k;t=3; } else if(t==3){ if(i==0){ a[i][++j]=k;t=0; }else{ a[--i][++j]=k;t=3; } } } for(int i=0;i<10;i++){ for(int j=0;j<10;j++){ if(a[i][j]) cout<<a[i][j]<<" "; if(j==9) cout<<endl; } } return 0; }
答案参考自:www.yangyingming.com/article/371…
2016年
-
输入三个数,求最大的数输出。 (送分略)
-
求两个数最大公约数最小公倍数
#include <iostream> using namespace std; int gcd(int t1, int t2) { return t2 == 0 ? t1 : gcd(t2, t1 % t2); }//另一种方法 int main() { int m,n,r,p,t; cin>>m>>n; if(m<0) m=-m; if(n<0) n=-n; if(m>n){ t=m; n=m; m=t; } p=m*n; while(m){ r=n%m; n=m; m=r; } cout<<"最大公因数:"<<n<<endl; //cout<<"最大公因数:"<<gcd(n,m)<<endl; cout<<"最小公倍数:"<<p/n<<endl; return 0; }
-
统计字符串中字母数字空格和其他字符个数
#include <iostream> using namespace std; int main() { int letter=0,digit=0,space=0,others=0; string str; getline(cin,str); int i=0; for (i=0; str[i]!='\0'; i++) if ((str[i]>='a'&& str[i]<='z')||(str[i]>='A' && str[i]<='Z')) letter++; else if (str[i]>='0' && str [i]<='9') digit++; else if (str[i]==32) space++; else others++; cout<<letter<<" "<<digit<<" "<<space<<" "<<others<<endl; return 0; }
-
输出*行的一个图案
#include <iostream> using namespace std; int main() { int i,j=3,k,g=1; for(i=0;i<4;i++) { for(k=j;k>0;k--) cout<<" "; for(k=g;k>0;k--) cout<<"*"; for(k=j;k>0;k--) cout<<" "; j--; g+=2; cout<<endl; } j=1;g=5; for(i=0;i<3;i++) { for(k=j;k>0;k--) cout<<" "; for(k=g;k>0;k--) cout<<"*"; for(k=j;k>0;k--) cout<<" "; j++; g-=2; cout<<endl; } return 0; }
-
迭代法求平方根
见 2018.3
-
将一个字符串反序输出接在后面再输出8进制转换
这题啥意思,字符串是一个整数?看不懂略
-
输出2k+1个数的中位数
#include <iostream> using namespace std; void BubbleSort(int a[],int n){ int flag,t; for(int i=0;i<n-1;i++){ flag=0; for(int j=n-1;j>i;j--){ if(a[j]<a[j-1]){ t=a[j]; a[j]=a[j-1]; a[j-1]=t; flag=1; } } if(flag==0) return; } } int main() { int a[105],k,i; cin>>k; for(i=0;i<2*k+1;i++) cin>>a[i]; BubbleSort(a,9); cout<<"中位数为:"<<a[k]<<endl; return 0; }
-
输入十进制数转换成n进制数并输出,转换后的结果
#include <iostream> using namespace std; int main() { int n, x; char s[105];//十进制以上有字符,所以用char存储 //输入10进制n 和 要转换的进制x cin>>n>>x; int cnt = 0;//数组下标 while (n > 0) //将n逐位分解 { int w = (n % x); if (w < 10) s[cnt++] = w + '0';//变成字符需要加'0' else s[cnt++] = (w - 10) + 'A';//如果转换为小写则加'a' //如果大于10则从A字符开始 n /= x; } //反序输出 for (int i = cnt - 1; i >= 0; i--) { cout<<s[i]; } cout<<endl; return 0; }