南理工上机试题
2010上机题1. 输入两个字符串s和t,打印出t在s中的出现的位置,并输出出现的次数如输入:s=qwqwertqweqqqq,t=qw输出:1 3 5 32. 观察一个数的序列规律,1,2,3,4,5,6,8,9,10,12,15,16,18现在输入一个数8(即上述序列中的第8个数),输出:9试编程实现。注:上述序列皆是1,2,3,5,的倍数3.求二进制逆序 如 输入10,对应二进制数为1010,其逆序为0101,对应十进制输出为5(5即为10的逆序数)。4.求满足条件n*n-m*m-n*m=1,且使m*m+n*n值最大的m,n,其中m,n的值都要小于k,k由用户输入。5.已知一个数组如a【10】=1,2,3,4,5,6,7,8,9,0,输入p,则右移p位,如输入3后,输出a【10】=8,9,0,1,2,3,4,5,6,7,要求时间复杂度和空间复杂度尽量小。6.已知一个斜三角:22 32 14 77 45 12 34 37 23 44 23 15 34 54 88 从最左上角元素开始往右或往右下走,请问顺着哪条路所经过的值的总和最大,如可以有路线:22,32,34,23,54 ; 22,12,44,34,88等等请求出满足值总和最大的那条线路。2010上机原题答案毕竟回忆的,个别地方会有一点点的出入第六题没来得及做,第一题有点问题,大家自己调一下。第一题#include<iostream.h>#include<iomanip.h>#include<math.h>#include<string.h>void main()char s70,t100;int i=0,j,count=0,len;cout<<"输入两字符串:"<<endl;cin>>s; cout<<"输入第2个字符串:"<<endl;cin>>t;len=strlen(t); while(s!='0')for(j=0;j<=len;j+)if(si+j=tj) j+;else break;if(j=len+1) count+; cout<<i+1;i+;cout<<endl<<count<<endl;第二题#include<iostream.h>#include<iomanip.h>#include<math.h>int fun(int n)while(n%2=0)n=n/2;while(n%3=0)n=n/3;while(n%5=0)n=n/5;if(n=1)return 1;else return 0;void main()int j=0,n,a1500;long i;for(i=1;i<1000000;i+) if(fun(i)aj+=i;cout<<"输入n(n<=1500):"<<endl;cin>>n;cout<<an-1<<endl;第三题#include<iostream.h>#include<iomanip.h>#include<math.h>void main()int i=0,m,j=0,n=0,a100;cout<<"输入一个十进制数:"<<endl;cin>>m;while(m!=0)a=m%2;m=m/2;i+;while(j<i)n=n*2+aj;j+;cout<<"其二进制逆序数:"<<endl<<n<<endl;第四题#include<iostream.h>#include<iomanip.h>#include<math.h>void main()int m,n,k,maxm,maxn,max=0;cout<<"输入k:"<<endl;cin>>k;for(m=0;m<=k;m+)for(n=0;n<=k;n+)if(n*n-m*n-m*m=1&&max<m*m+n*n) max=m*m+n*n;maxm=m;maxn=n;cout<<maxm<<""<<maxn<<endl;第五题#include<iostream.h>#include<iomanip.h>#include<math.h>void main()int p,i,j,r10=1,2,3,4,5,6,7,8,9,10,s10;cin>>p;for(i=0;i<=p-1;i+)s=r;for(j=p;j<=10;j+)rj-p=rj;for(j=0;j<p;j+)r10-p+j=sj; cout<<"左移后的结果:"<<endl;for(i=0;i<10;i+)cout<<r<<setw(5);cout<<endl;2007年A.1 递归方程编程。F(x)= 编写函数,并利用该函数输出f(2,0),f(2,1),f(2,3)的值。A.2 找出这样的数:本身是三位的完全平方数n(100<=n<1000),而且有有两位上的数字相同,如484A.3输入年份和月份,计算该年初到该年这个月底的总天数(注意闰年)。A.3'输入年月日,计算该月日是该年的第几天。A.4用牛顿迭代法求某正数n的平方根A.5求亲密数 a,b(均为正整数):a的所有因子(含1不含a本身)之和为b,若b的所有因子(含1不含b本身)之和为a,则a,b为亲密数,求满足a<b的亲密数,键盘输入范围m,n(10<m<n<10000)A.6/给定数组,求连续三元素之和,输出和最大的第一个元素的下标A.7/键盘输入正整数序列-1结尾,以此按升序建立双向循环链表,并降序输出A.1#include<iostream.h>#include<iomanip.h>float fun(float x,int n)if(0=n)return 1;else if(1=n)return x;elsereturn (2*n-1)*x-fun(x,n-1)-(n-1)*fun(x,n-2)/n);void main()int n;float p,x;cout<<fun(2,0)<<endl;cout<<fun(2,1)<<endl;cout<<fun(2,3)<<endl;/mainA.2#include<iostream.h>#include<iomanip.h>#include<math.h>int fun1(int n)int temp;temp=(int)sqrt(n);if(n=temp*temp)return 1;elsereturn 0;int fun2(int n)int a3,i;for(i=0;i<3;i+)a=n%10;n/=10;if(a0= a1 | a1= a2 | a0= a2)return (1);else return 0;void main()int n;for(n=100;n<1000;n+)if(fun1(n) && fun2(n)cout<<"n="<<n<<endl;/mainA.3#include<iostream.h>structint year;int month;int day;date;void main()int days;cout<<"input year,month,day:n"cin>>date.year>>date.month>>date.day;switch(date.month)case 1: days=date.day; break;case 2: days=date.day+31; break;case 3: days=date.day+31+28;break;case 4: days=date.day+31+28+31;break;case 5: days=date.day+31+28+30+31;break;case 6: days=date.day+31+28+31+30+30;break;case 7: days=date.day+31+28+31+30+30+31;break;case 8: days=date.day+31+28+31+30+30+31+31;break;case 9: days=date.day+31+28+31+30+30+31+31+30;break;case 10: days=date.day+31+28+31+30+30+31+31+30+31;break;case 11: days=date.day+31+28+31+30+30+31+31+30+31+30;break;case 12: days=date.day+31+28+31+30+30+31+31+30+31+30+31;break;/switch(month)if(date.year%4=0&&date.year%100!=0)|date.year%400=0)&&date.month>=3)days+=1;cout<<date.month<<"/"<<date.day<<"is the "<<days<<"th day in "<<date.year<<"."<<endl;/mainA.3#include<iostream.h>#include<iomanip.h>#include<math.h>int leapyear(int year)if(year%4=0&&year%100!=0| year%400=0)return 1;else return 0;void main()int year,month;int num=0,feb=0;cout<<"请输入年份n和月份m"<<endl;cin>>year>>month;if(leapyear(year) feb=29;else feb=28;switch(month)case 1: num=num+31; break;case 2: num=num+31+feb; break;case 3: num=num+31+feb+31;break;case 4: num=num+31+feb+31+30;break;case 5: num=num+31+feb+31+30+31;break;case 6: num=num+31+feb+31+30+31+30;break;case 7: num=num+31+feb+31+30+31+30+31;break;case 8: num=num+31+feb+31+30+31+30+31+31;break;