上海交通大学11年机考复试题

明天去交大保研复试,这是一个意外的惊喜,之前都没想到......

http://ac.jobdu.com/problem.php?pid=1103

这一题我坑在求根公式忘了,外加交换次序没对


题目描述:

设计一个二次方程计算器

输入:

每个案例是关于x的一个二次方程表达式,为了简单,每个系数都是整数形式。

输出:

每个案例输出两个实数(由小到大输出,中间由空格隔开),保留两位小数;如果无解,则输出“No Solution”。

样例输入:
x^2+x=3x+4
样例输出:
-1.24 3.24
来源:
2011年上海交通大学计算机研究生机试真题
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;

bool isNum(char c){
    if(c >= '0' && c<='9')
        return 1;
    else
        return 0;
}

bool isC(char c){
    if(c == 'x' || c == '^')return 1;
    return 0;
}

string changeStart(string in){
    if(in[0] == '-')return in;
    string ret;
    if(isNum(in[0])){
        ret = "+";
        ret = ret + in;
        return ret;
    }
    if(isC(in[0])){
        ret = "+1";
        ret = ret + in;
        return ret;
    }
}

string rev(string str){
    for(int i=0;i> in){
        solve(in);
    }
    return 0;
}

http://ac.jobdu.com/problem.php?pid=1104

这题我坑在,如果n

题目1104:整除问题

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:4100

解决:1335

题目描述:

给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除。

输入:

两个整数n(2<=n<=1000),a(2<=a<=1000)

输出:

一个整数.

样例输入:
6 10
样例输出:
1
来源:
2011年上海交通大学计算机研究生机试真题
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;

const int SIZE = 1001;
int vis[SIZE];
int prime[SIZE];
int getPrime(int n){
    memset(vis, 0, sizeof(vis));
    //int n = SIZE-1;
	int i;
    for(i=2;i<=n;i++){
        for(int j=i*2; j<=n;j+=i)
            vis[j] = 1;
    }
    int k=0;
    for(i=2;i<=n;i++)
        if(!vis[i])
            prime[k++] = i;
    return k;
}

int n,a;
int pos[SIZE];
int numprime;
int gn[SIZE][SIZE];
int an[SIZE];

void getN(int limit){
	int i;
	for( i=0;i 1 && t>=prime[j] && t%prime[j] == 0){
				gn[i][ prime[j] ] ++;
				t/=prime[j];
			}
			//if(t < prime[j])break;
		}

		if(t != 1)gn[i][ t ]++; /////////
	}
}

void init(){
	numprime = getPrime(SIZE-1);
	getN(SIZE);

}

void getan(){
	memset(an,0,sizeof(an));
	int t = a;
	for(int i=0;i= prime[i] ;i++){
		while(t >1 && t>= prime[i] && t%prime[i] == 0){
			an[prime[i]] ++;
			t /= prime[i];
		}

	}
	if(t != 1)an[t]++;
}

int main(){
	init();
	/*for(int c=0;c<15;c++){
		printf("%d=%d\n",c,prime[c]);
	}*/
	while(~scanf("%d%d", &n, &a)){
		int mn = 2000000000;
		getan();
		int ans=0;
		int flag=1;
		int i;
		/*for(i=0;i<11;i++){
			cout << "i=" << i << "  an=" << an[i] << "  gn" << gn[n][i] << endl; 
		}*/
		

		for(i = 0; i< numprime; i++){
			if(an[prime[i]] == 0)continue;
			if(an[prime[i]] > gn[n][prime[i]]){
				ans = 0;
				//mn = 
				break;
			}
			//mn = min(mn, (int)gn[n][prime[i]]/an[prime[i]]);
			int tmp =  (int)gn[n][prime[i]]/an[prime[i]];
			if(tmp < mn){
				mn = tmp;
				ans = mn;
			}
		}
		printf("%d\n", ans);
	}
	return 0;
}


你可能感兴趣的:(上海交通大学11年机考复试题)