2019年途家 秋招 研发笔试

版权声明:大部分为自己原创,也有借鉴大佬的文章。希望大家可以一起交流。 https://blog.csdn.net/qq_42021846/article/details/82595377

选择题编程题都不怎么难。主要看下编程题。

第一道题就比较简单的。

#include "iostream"
using namespace std;

int Max(int m,int n){
	int r,temp;
	if(m<n){
		temp = m;
		m = n;
		n = temp;
	}
	while(n!=0){
		r = m%n;
		m=n;
		n=r;
	}
	return m;
}
int Min(int m,int n,int max){
	int t;
	t = m*n/max;
	return t;
}
int main()
{
	int m,n,max,min;
	cin>>m>>n;
	max = Max(m,n);
	min = Min(m,n,max);
	cout<<max<<endl;
	cout<<min;
	return 0;
}

 

 

这道题暴力查找肯定不行,容易超时,采用动态规划容易实现。 

#include <iostream>
using namespace std;

int const maxn = 1000;
int a[maxn];
long long f[maxn];
int main() {
    int n,sum;
    cin>>n>>sum;
    for (int i=1;i<=n;i++) {
        cin>>a[i];   
    }
    f[0] = 1;
    for (int i=1;i<=n;i++) {
        for (int j=maxn;j>=0;j--) {
            if(j>=a[i]) {
                f[j] += f[j-a[i]];
            } 
        }
    }
    cout<<f[sum]<<endl;
}

 

    如果是(k+1)的整数倍,第一个人取任何一个1到k内的任意数x,第二个人都可以取(k+1-x)个石子,那么,第一个人必败的条件就是k+1的整数倍。反之,如果不是k+1的整数倍,第一人可以取n%(k+1)个石子,从而第二个人必败。

#include <iostream>
using namespace std;
 
int main()
{
    int n,k,t;
    cin>>t;
    while(t--)
    {
        cin>>n>>k;
        if(n%(k+1))
        cout<<"A"<<endl;
        else
        cout<<"B"<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42021846/article/details/82595377
今日推荐