2011南理工研究生复试上机真题

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

这是2011年复试上机自己整理的答案,个别题目还没理解什么意思,贴出来大家交流。也供2012的学弟学妹们参考,有问题大家指教~
/*
第一题
一个数平方之后 逆序与原来相等,求这个数
*/
#include
#include
#include
#include
bool fun(int x)
{
int sum=0;
int temp=x;
while(x!=0)
{
sum=sum*10+x%10;
x=x/10;
}
if(temp==sum)
return true;
else
return false;
}
void main()
{
for(int i=1;i<=256;i++)
{
if(fun(i*i))
cout<}
cout<}
/*
第二题
求一个数组的行 列 对角线之后 并降序输出
*/
#include
#include
#include
#include
#include
using namespace std;
#define M 20
bool compare(int a,int b)
{
//这个地方 我马虎了 应该是降序,我排出来的结果是升序
if(a>b)
return true;
return false;
}

void main()
{
int m,i;
int sum=0;
cout<<"input m:";
cin>>m;
int **a= (int **)new int[m];
for(i=0;ia[i]=new int [m];
cout<<"input the number:"<for(i=0;i{
for(int j=0;j{
cout<cin>>a[i][j];
}
}
for( i=0;i{
for(int j=0;jcout<cout<}
int *b=new int[2*m+2];
int k=0;

for(i=0;i{
int sum=0;
for(int j=0;j{
sum+=a[i][j];
}
b[k++]=sum;
}

for(i=0;i{
int sum=0;
for(int j=0;j{
sum+=a[j][i];
}
b[k++]=sum;
}
sum=0;
for(i=0;i{

sum+=a[i][i];
}
b[k++]=sum;
sum=0;
for(i=0;i{

sum+=a[i][m-i-1];
}
b[k++]=sum;
int n=2*m+2;
sort(b,b+n,compare);
for(i=0;i{
cout<}

cout<}
/*
第三题
找字串 若存在则替换为另一字符串
*/
#include
#include
#include
#include
bool find(char *s,char *s1)
{
int ls=strlen(s);
int ls1=strlen(s1);
for(int i=0;i<=ls-ls1;i++)
{
for(int j=0;j{
if(s1[j]!=s[i+j])
break;
if(j==ls1-1)
return i;
}
}
return 0;
}
void replace(char rs[],char a[],char s1[],const char s2[])
{
int k=0;
int flag=find(a,s1);
if(flag)
{
for(int i=0;i<=flag;i++)
{
rs[k++]=a[i];
}
for(int j=0;j{
rs[k++]=s2[j];
}
for(i=flag+strlen(s1)+1;a[i]!='\0';i++)
{
rs[k++]=a[i];
}
rs[k]='\0';

}
}
void main()
{
char rs[200];
char a[100]="nihaozhongguo";
char s1[200]="hao";
char s2[100]="ok";
replace(rs,a,s1,s2);
cout<<"The string s is:"<cout<<"The string s1 is:"<cout<<"The string s2 is:"<cout<<"The result is:";
cout<cout<}
/*
第四题
三位数abc+bcc=552 求abc 都是多少

此题为原题
*/
#include
#include
#include
#include
void main()
{
for(int a=0;a<9;a++)
for(int b=0;b<9;b++)
for(int c=0;c<9;c++)
{
int m=a*100+b*10+c;
int n=b*100+c*10+c;
if(m+n==532)
cout<}
}

/*
第五题
一个数组 能够 1、在末尾添加 2、能够替换 3、能够所有删除指定的元素
*/
#include
#include
#include
#include
# define M 7
int counter=0;
void fun1(int *a,int x)
{
a[M+counter]=x;
counter++;
}
void fun2(int *a,int m,int n)
{
for(int i=0;i{
if(a[i]==m)
a[i]=n;
}
}
void fun3(int *a,int n)
{
for(int i=0;i{
if(a[i]==n)
{
for(int j=i;ja[j]=a[j+1];
counter--;
}
}
}
void print(int *a)
{
for(int i=0;i{
cout<}
cout<}
void main()
{
int a[M+10]={12,34,2,15,26,8,40};
char c;
int m,n;
print(a);


while(1)
{
cout<<"输入字符(a或者c或者d,其他字符退出):";
cin>>c;
switch(c)
{
case 'a':
cout<<"输入一个数字:";
cin>>m;
fun1(a,m);
print(a);
break;
case 'c':
cout<<"输入两个数字:";
cin>>m>>n;
fun2(a,m,n);
print(a);
break;
case 'd':
cout<<"输入一个数字:";
cin>>m;
fun3(a,m);
print(a);
break;
default :
return;
}
}
}

/*
第六题
题目不太理解。我的理解是:一个非素数a有若干质数因子b,c等,非素数a各个位上的数字和等于各个质素因子(b,c)各个位上的数字的和
如 4是非素数 有质数因子2 则4=2+2
22是非素数 有质数因子2 11 则2+2=2+1+1
*/
#include
#include
#include
#include

bool isprim(int x)
{
//判断是否为素数 i从2开始,我当时糊涂从0开始程序一运行就崩溃(分母不能为0),最终也没发现,这一题没完成。悔之晚矣
for(int i=2;i<=sqrt(x);i++)
{
if(x%i==0)
return false;
}
return true;
}
int weishu(int x)
{
int sum=0;
while(x!=0)
{
sum+=x%10;
x=x/10;
}
return sum;
}
bool fun(int x)
{
int sum=0;
int a[100];
int k=0;
for(int i=2;i{
if(x%i==0&&isprim(i))
a[k++]=i;
}
if(k==1)
{
int ji=1;
for(int j=0;ji{
if(x==(int)pow(a[0],j))
break;
}
if(j*a[0]==weishu(x))
return true;

}
else
{
int sum=0;
for(int m=0;m{
sum=sum+weishu(a[m]);
}
if(weishu(x)==sum)
return true;
}
return false;
}
void main()
{

for(int i=1;i<100;i++)
{
if(!isprim(i)&&fun(i))
cout<}
cout<}
/*
第七题
将一个字

符串中的连续数字组合 整理到一个数组中
此题原题
*/
#include
#include
#include
#include
#define M 1000
int fun(char *s,int *b)
{
int i=0;
int a=0;
int num=0;
while(s[i]!='\0')
{
if(s[i]>='0'&&s[i]<='9')
{
a=a*10+s[i]-'0';
if(s[i+1]<='0'||s[i+1]>='9')
{
b[num++]=a;
a=0;
}
}
i++;
}
return num;
}
void main()
{
char s[M];
int b[M];
cout<<"input a string:";
cin.getline(s,M);
int k=fun(s,b);
cout<<"The number is:"<for(int i=0;icout<cout<}
这是我写的第六题答案#include
int judge(int n)
{
int i;
int sum=0;
for(i=1;i<=n;i++)
{
if(n%i==0)
sum=sum+1;
}
if(sum==2) return 0;
else return 1;
}
int total(int n)
{
int i;
int sum=0;
while(n!=0)
{
i=n%10;
sum=sum+i;
n=n/10;
}
return sum;
}
void main()
{
int i;
int j;
int m;
int sum1,sum2;
for(i=1;i<100;i++)
{ m=i;
sum1=0;sum2=0;
if(judge(i))
{ sum1=total(i);
for(j=1;j{
while(m!=1&&m%j==0&&(!judge(j)))
{
m=m/j;
sum2=sum2+total(j);
}

}
if(sum1==sum2)
cout<}
}

}


相关文档
最新文档