九度OJ 题目1076:N的阶乘
时间限制:3 秒 内存限制:128 兆 特殊判题:否 提交:1266 解决:351
题目描述:
输入一个正整数N,输出N的阶乘。
输入:
正整数N(0<=N<=1000)
输出:
输入可能包括多组数据,对于每一组输入数据,输出N的阶乘
样例输入:
4
5
15
样例输出:
24
120
1307674368000
九度OJ 题目1077:最大序列和
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:553 解决:137
题目描述:
给出一个整数序列S,其中有N个数,定义其中一个非空连续子序列T中所有数的和为T的“序列和”。
对于S的所有非空连续子序列T,求最大的序列和。
变量条件:N为正整数,N≤1000000,结果序列和在范围(-2^63,2^63-1)以内。
输入:
第一行为一个正整数N,第二行为N个整数,表示序列中的数。
输出:
输入可能包括多组数据,对于每一组输入数据,
仅输出一个数,表示最大序列和。
样例输入:
5
1 5 -3 2 4
6
1 -2 3 4 -10 6
4
-3 -1 -2 -5
样例输出:
9
7
-1
九度OJ 题目1078:二叉树遍历
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:159 解决:109
题目描述:
二叉树的前序、中序、后序遍历的定义:
前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树;
中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树;
后序遍历:对任一子树,先遍历其左子树,然后遍历其右子树,最后访问根。
给定一棵二叉树的前序遍历和中序遍历,求其后序遍历(提示:给定前序遍历与中序遍历能够唯一确定后序遍历)。
输入:
两个字符串,其长度n均小于等于26。
第一行为前序遍历,第二行为中序遍历。
二叉树中的结点名称以大写字母表示:A,B,C....最多26个结点。
输出:
输入样例可能有多组,对于每组测试样例,
输出一行,为后序遍历的字符串。
样例输入:
ABC
BAC
FDXEAG
XDEFAG
样例输出:
BCA
XEDGAF
因为二叉树遍历几乎不会 所以参考了别人的程序 以后有时间写个自己的非递归版吧
时间限制:3 秒 内存限制:128 兆 特殊判题:否 提交:1266 解决:351
题目描述:
输入一个正整数N,输出N的阶乘。
输入:
正整数N(0<=N<=1000)
输出:
输入可能包括多组数据,对于每一组输入数据,输出N的阶乘
样例输入:
4
5
15
样例输出:
24
120
1307674368000
//清华2006:题目1076:N的阶乘
//输出N的阶乘(0<=N<=1000) 即大数乘法
#include <fstream>
#include <iostream>
#include <memory.h>
using namespace std;
int a[100000];
int length; //a数组的实际占用长度
void mul(int *a, int b ){ // b 为乘数
int i, tmp, carry=0;
for( i=0; i<length; i++ ){
tmp = a[i] * b + carry;
a[i] = tmp % 10000; //每个数组max=9999 运算中实际max=9999000 carry=999
carry = tmp / 10000;
}
if( carry!=0 ){
a[length] = carry;
length++;
}
}
int main(){
int i, j, k, n;
//ifstream cin("THU_1076.txt");
while( cin >> n ){
memset(a,0,sizeof(a));
a[0] = 1;
length = 1;
for( i=2; i<=n; i++ ){
mul( a, i );
//逐级输出 调试用
//for( j=length-1; j>=0; j-- ){
// if( j!=length-1 ){
// if( a[j]<10 )
// cout << "000";
// else if( a[j]<100 )
// cout << "00";
// else if( a[j]<1000 )
// cout << "0";
// }
// cout << a[j];
//}
//cout << endl;
}
//ofstream out("THU_1076_output.txt");
for( j=length-1; j>=0; j-- ){
if( j!=length-1 ){
if( a[j]<10 )
cout << "000";
else if( a[j]<100 )
cout << "00";
else if( a[j]<1000 )
cout << "0";
}// if
cout << a[j];
}// for
cout << endl;
}
return 0;
}
九度OJ 题目1077:最大序列和
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:553 解决:137
题目描述:
给出一个整数序列S,其中有N个数,定义其中一个非空连续子序列T中所有数的和为T的“序列和”。
对于S的所有非空连续子序列T,求最大的序列和。
变量条件:N为正整数,N≤1000000,结果序列和在范围(-2^63,2^63-1)以内。
输入:
第一行为一个正整数N,第二行为N个整数,表示序列中的数。
输出:
输入可能包括多组数据,对于每一组输入数据,
仅输出一个数,表示最大序列和。
样例输入:
5
1 5 -3 2 4
6
1 -2 3 4 -10 6
4
-3 -1 -2 -5
样例输出:
9
7
-1
各种情况都要考虑到啊 包括单个输入数据可能是大数 超出int范围
//清华2006:题目1077:最大序列和
//求给定序列的最大非空连续子序列和
//N为正整数,N≤1000000,结果序列和在范围(-2^63,2^63-1)以内。
#include <fstream>
#include <iostream>
#define INT long long
using namespace std;
int main(){
int i, n;
INT temp, sum, b;
ifstream cin("THU_1077.txt");
while( cin >> n ){
for( i=0; i<n; i++ ){
cin >> b;
if( i == 0 ){
sum = b;
temp = 0;
}
if( temp > 0 )
temp += b;
else
temp = b;
if( temp > sum )
sum = temp;
}// for
cout << sum << endl;
}
system("pause");
return 0;
}
九度OJ 题目1078:二叉树遍历
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:159 解决:109
题目描述:
二叉树的前序、中序、后序遍历的定义:
前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树;
中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树;
后序遍历:对任一子树,先遍历其左子树,然后遍历其右子树,最后访问根。
给定一棵二叉树的前序遍历和中序遍历,求其后序遍历(提示:给定前序遍历与中序遍历能够唯一确定后序遍历)。
输入:
两个字符串,其长度n均小于等于26。
第一行为前序遍历,第二行为中序遍历。
二叉树中的结点名称以大写字母表示:A,B,C....最多26个结点。
输出:
输入样例可能有多组,对于每组测试样例,
输出一行,为后序遍历的字符串。
样例输入:
ABC
BAC
FDXEAG
XDEFAG
样例输出:
BCA
XEDGAF
因为二叉树遍历几乎不会 所以参考了别人的程序 以后有时间写个自己的非递归版吧
//清华2006:题目1078:二叉树遍历
//两个字符串,其长度n均小于等于26。 第一行为前序遍历,第二行为中序遍历。
//二叉树中的结点名称以大写字母表示:A,B,C....最多26个结点。
//输出后序遍历的字符串。
#include <fstream>
#include <string>
#include <iostream>
using namespace std;
struct BiTree{
char a;
BiTree* l;
BiTree* r;
};
BiTree* process( string S, string T ){
if( S.empty() )
return NULL;
int mark = T.find(S[0]); //t[S[0]-64];
BiTree *b = new BiTree(); //b=binary tree
b->a = S[0];
b->l = process( S.substr(1,mark), T.substr(0,mark) );
b->r = process( S.substr(mark+1,S.size()-mark-1),
T.substr(mark+1,T.size()-mark-1) );
return b;
};
void postTraverse( BiTree* b ){
if( b != NULL ){
if( b->l != NULL) postTraverse(b->l);
if( b->r != NULL) postTraverse(b->r);
cout << b->a;
}
};
int main(){
int i, n;
string S, T; //preorder inorder postorder
ifstream cin("THU_1078.txt");
while( cin >> S >> T ){
BiTree *B = process( S, T );
postTraverse( B );
cout << endl;
}
system("pause");
return 0;
}