您的位置:首页 > 其它

哈尔滨工业大学2010年复试上机题 解题报告

2012-03-19 22:28 344 查看
[b]九度OJ
题目1050:完数[/b]

时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1711 解决:621

题目描述:

求1-n内的完数,所谓的完数是这样的数,它的所有因子相加等于它自身,比如6有3个因子1,2,3,1+2+3=6,那么6是完数。即完数是等于其所有因子相加和的数。

输入:

测试数据有多组,输入n,n数据范围不大。

输出:

对于每组输入,请输出1-n内所有的完数。如有案例输出有多个数字,用空格隔开,输出最后不要有多余的空格。

样例输入:

6

样例输出:

6

用最笨的算法求的因子 并不好 虽然本题也说了n不大 即也不意在考察高效求解因子 但还是得学会高效的方法 留给以后吧

#include <memory.h>
#include <iostream>
using namespace std;
int perfect[10], num;

void init(){
int i, j, k, sum;
num=0;
for( i=6; i<10000; i++ ){
sum = 1;
for( j=2; j<=i/2; j++ )
if( i%j==0 ) sum += j;
if( i==sum )
perfect[num++] = i;
}
}

int main()
{
int i, j, k, m, n;
memset(perfect,0,sizeof(perfect));
init();
while( cin >> n ){
if( n < 6 )
cout << "\n";
else{
cout << "6";
i = 0;
while( perfect[++i]<=n && i<num )
cout << " " << perfect[i];
cout << endl;
}
}
return 0;
}




[b]九度OJ
题目1051:数字阶梯求和[/b]

时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1502 解决:455

题目描述:

给定a和n,计算a+aa+aaa+a...a(n个a)的和。

输入:

测试数据有多组,输入a,n(1<=a<=9,1<=n<=100)。

输出:

对于每组输入,请输出结果。

样例输入:

1 10

样例输出:

1234567900

简单的大数运算 我的一贯思路都是本题这种:开始时每位都可以大些 然后从低位向高位撸一遍处理进位

#include <iostream>
using namespace std;
int c[101];

void init( int a, int n ){
int i, carry;
for( i=1; i<=n; i++ )
c[i] = a * i;
carry = 0;
for( i=n; i>=1; i-- ){
c[i] += carry;
carry = c[i] / 10;
c[i] %= 10;
}
c[0] = carry;
}

int main()
{
int i, j, k, m, n;
int a;
while( cin >> a >> n ){
init(a,n);
if( c[0]!=0 )
cout << c[0];
for( i=1; i<=n; i++ )
cout << c[i];
cout << endl;
}
return 0;
}


[b]九度OJ
题目1052:找x[/b]

时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1131 解决:573

题目描述:

输入一个数n,然后输入n个数值各不相同,再输入一个值x,输出这个值在这个数组中的下标(从0开始,若不在数组中则输出-1)。

输入:

测试数据有多组,输入n(1<=n<=200),接着输入n个数,然后输入x。

输出:

对于每组输入,请输出结果。

样例输入:

2

1 3

0

样例输出:

-1

还有比这题更基础的题目么?

#include <iostream>
using namespace std;
int c[200];

int main()
{
int i, j, k, m, n;
int x;
while( cin >> n ){
for( i=0; i<n; i++ )
cin >> c[i];
cin >> x;
bool found = 0;
for( i=0; i<n; i++ )
if( x==c[i] ){
found = 1;
break;
}
if(found)
cout << i << endl;
else cout << "-1\n";
}
return 0;
}


[b]九度OJ
题目1053:互换最大最小数[/b]

时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1345 解决:526

题目描述:

输入一个数n,然后输入n个数值各不相同,调换数组中最大和最小的两个数,然后输出。

输入:

测试数据有多组,输入n(1<=n<=20),接着输入n个数。

输出:

对于每组输入,输出交换后的结果。

样例输入:

2

1 3

样例输出:

3 1

#include <iostream>
using namespace std;
int a[20];

int main()
{
int i, j, k, m, n;
int Min, Max, minIndex, maxIndex;
while( cin >> n ){
cin >> a[0];
Max = Min = a[0];
minIndex = maxIndex = 0;
for( i=1; i<n; i++ ){
cin >> a[i];
if( a[i] > Max ){
Max = a[i];
maxIndex = i;
}
else if( a[i] < Min){
Min = a[i];
minIndex = i;
}
}
a[maxIndex] = Min;
a[minIndex] = Max;
for( i=0; i<n-1; i++ )
cout << a[i] << " ";
cout << a[n-1] << endl;
}
return 0;
}


[b]九度OJ
题目1054:字符串内排序[/b]

时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1040 解决:551

题目描述:

输入一个字符串,长度小于等于200,然后将输出按字符顺序升序排序后的字符串。

输入:

测试数据有多组,输入字符串。

输出:

对于每组输入,输出处理后的结果。

样例输入:

bacd

样例输出:

abcd

我很可耻的直接用的STL 于是它成了我的迄今为止最短的AC程序(大概

#include <algorithm>
#include <string>
#include <iostream>
using namespace std;
string s;

int main()
{
int i, j, k, m, n;
int Min, Max, minIndex, maxIndex;
while( cin >> s ){
n = s.length();
char *p = &s[0];
sort(p,p+n);
cout << s << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: