精华2
威望145
K币316 元
注册时间2009-9-16
在线时间77 小时
最后登录2017-3-12
一般战友
- 精华
- 2
- 威望
- 145
- K币
- 316 元
- 注册时间
- 2009-9-16
|
2010上机题
1. 输入两个字符串s和t,打印出t在s中的出现的位置,并输出出现的次数
如输入:s=qwqwertqweqqqq,t=qw
输出:1 3 5
3
2. 观察一个数的序列规律,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 s[70],t[100];
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(s[i+j]==t[j])
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,a[1500];
long i;
for(i=1;i<1000000;i++)
{ if(fun(i))
a[j++]=i;
}
cout<<"输入n(n<=1500):"<<endl;
cin>>n;
cout<<a[n-1]<<endl;
}
第三题
#include<iostream.h>
#include<iomanip.h>
#include<math.h>
void main()
{
int i=0,m,j=0,n=0,a[100];
cout<<"输入一个十进制数:"<<endl;
cin>>m;
while(m!=0)
{
a=m%2;
m=m/2;
i++;
}
while(j<i)
{
n=n*2+a[j];
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,r[10]={1,2,3,4,5,6,7,8,9,10},s[10];
cin>>p;
for(i=0;i<=p-1;i++)
s=r;
for(j=p;j<=10;j++)
r[j-p]=r[j];
for(j=0;j<p;j++)
r[10-p+j]=s[j];
cout<<"左移后的结果:"<<endl;
for(i=0;i<10;i++)
cout<<r<<setw(5);
cout<<endl;
}
[ 本帖最后由 tsinjz 于 2010-4-10 00:40 编辑 ] |
评分
-
查看全部评分
|