哈工大机试试题合集

🍰🍰🍰hello宝子们,今天我们来练习哈尔滨工业大学的机试题目。加油!fighting!( •̀ ω •́ )✧

🍩1355 素数判定

#include<bits/stdc++.h>
using namespace std;
bool prime(long long x)
{
	if(x==0||x==1||x<0) return false;
	for(long long i=2;i<=sqrt(x);i++) 
	{
		if(x%i==0) return false;
	}
	return true;
}
int main()
{
	long long n;
	while(cin>>n)
	{
		if(prime(n)) cout<<"yes"<<endl;
		else cout<<"no"<<endl;
	}
	return 0;
}

🍩1348 百鸡问题

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n;
	while(cin>>n)
	{
		for(int i=0;i<=100;i++)
		{
			for(int j=0;j<=100;j++)
			{
				for(int k=0;k<=100;k++)
				{
					if(i+j+k==100&&5*i+3*j+(1.0/3)*k<=n) cout<<"x="<<i<<",y="<<j<<",z="<<k<<endl;
				}
			}
		}
	}
	return 0;
}

🍩1360 字符串内排序

#include<bits/stdc++.h>
using namespace std;
int main()
{
	string s;
	while(cin>>s){
		sort(s.begin(),s.end());
		cout<<s<<endl;
	}
	return 0;
}

🍩1353 最大公约数

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a,b;
	while(cin>>a>>b){
		int minm=min(a,b);
		for(int i=minm;i>=1;i--){
			if(a%i==0&&b%i==0){
				cout<<i<<endl;
				break;
			}
		}
	}
	return 0;
}

🍩1363 计算两个矩阵的乘积

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a[5][5]={0},b[5][5]={0};
	for(int i=1;i<=2;i++)
		for(int j=1;j<=3;j++)
			cin>>a[i][j];
	for(int i=1;i<=3;i++)
		for(int j=1;j<=2;j++)
			cin>>b[i][j];
	cout<<a[1][1]*b[1][1]+a[1][2]*b[2][1]+a[1][3]*b[3][1]<<" "<<a[1][1]*b[1][2]+a[1][2]*b[2][2]+a[1][3]*b[3][2]<<endl;
	cout<<a[2][1]*b[1][1]+a[2][2]*b[2][1]+a[2][3]*b[3][1]<<" "<<a[2][1]*b[1][2]+a[2][2]*b[2][2]+a[2][3]*b[3][2];
	return 0;
}

🍩1351 判断三角形类型

#include<bits/stdc++.h>
using namespace std;
int main()
{
	//直角三角形直接用勾股定理判断;
    //锐角和钝角用cos判断,如果三个角的cos都大于0,那么就是锐角三角形
	int a,b,c;
	while(cin>>a>>b>>c){
		if(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a){
			cout<<"直角三角形"<<endl;
			continue;
		}
		double cos1=(a*a+b*b-c*c)/2.0*a*b,cos2=(a*a+c*c-b*b)/2.0*a*c,cos3=(b*b+c*c-a*a)/2.0*b*c;
		if(cos1>0&&cos2>0&&cos3>0){
			cout<<"锐角三角形"<<endl;
			continue;
		}
		cout<<"钝角三角形"<<endl;
	}
	return 0;
}

🍩1350 找x

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,x,a[205];
	while(cin>>n){
		for(int i=0;i<n;i++) cin>>a[i];
		cin>>x;
		int flag=0;
		for(int i=0;i<n;i++){
			if(x==a[i]){
				cout<<i<<endl;
				flag=1;
				break;
			}
		}
		if(flag==0) cout<<-1<<endl;
	}
	return 0;
}

🍩1361 求最大值

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int cur,maxm;
	while(cin>>cur){
		maxm=cur;
		for(int i=0;i<9;i++){
			cin>>cur;
			maxm=max(maxm,cur);
		}
		cout<<"max="<<maxm<<endl;
	}
	return 0;
}

🍩1362 字符串去特定字符

#include<bits/stdc++.h>
using namespace std;
int main()
{
	string s;
	char c;
	while(cin>>s>>c){
		string ans="";
		for(int i=0;i<s.size();i++){
			if(s[i]!=c) ans+=s[i];
		}
		cout<<ans<<endl;
	}
	return 0;
}

🍩1349 互换最大最小数

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,a[30];
	while(cin>>n){
		for(int i=0;i<n;i++) cin>>a[i];
		int maxm=a[0],minm=a[0],ma=0,mi=0;
		for(int i=1;i<n;i++){
			if(a[i]>maxm){
				maxm=a[i];
				ma=i;
			}
			if(a[i]<minm){
				minm=a[i];
				mi=i;
			}
		}
		swap(a[ma],a[mi]);
		for(int i=0;i<n;i++) cout<<a[i]<<" ";
		cout<<endl;
	}
	return 0;
}

🍩1356 字符串链接

#include<bits/stdc++.h>
using namespace std;
int main()
{
	string a,b;
	while(cin>>a>>b){
		cout<<a<<b<<endl;
	}
	return 0;
}

🍩1354 完数

#include<bits/stdc++.h>
using namespace std;
bool wanshu(int n){
	if(n<0||n==0||n==1) return false;
	vector<int> a;
	a.push_back(1);
	for(int i=2;i<n;i++) 
		if(n%i==0) a.push_back(i);
	int ans=0;
	for(int i=0;i<a.size();i++) ans+=a[i];
	if(ans==n) return true;
	return false;
}

int main()
{
	int n;
	while(cin>>n){
		for(int i=1;i<=n;i++)
			if(wanshu(i)) cout<<i<<" ";
		cout<<endl;
	}
	return 0;
}

🍩1358 数组逆置

#include<bits/stdc++.h>
using namespace std;
int main()
{
	string s;
	while(cin>>s){
		for(int i=s.size()-1;i>=0;i--) cout<<s[i];
	}
	return 0;
}

🍩1352 众数

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a[15]={0},cur;
	while(cin>>cur){
		a[cur]++;
		for(int i=0;i<19;i++){
			cin>>cur;
			a[cur]++;
		}
		int ans=0,res;
		for(int i=1;i<=10;i++){
			if(a[i]>ans){
				ans=a[i];
				res=i;
			}
		}
		cout<<res<<endl;
	}
	return 0;
}

🍩1359 数字阶梯求和🍦

直接暴力能过60%,其余的超出long long限制:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a,n;
	while(cin>>a>>n){
		long long ans=0,last=0;
		for(int i=1;i<=n;i++){
			last=last*10+a;
			ans+=last;
		}
		cout<<ans<<endl;
	}
	return 0;
}

使用python会超时。

满分代码:各位单独计算处理

#include<bits/stdc++.h>
using namespace std;

int main() {
    int a,n;
	int num[105];
    while(cin>>a>>n){
    	memset(num,0,sizeof(num));
		//我们这样想,个位是n个a相加,十位是n-1个a相加,百位是n-2个a相加,……需要我们额外处理的就是溢出问题
    	//我们逆着来处理,最后reverse一下就好了
		for(int i=1;i<=n;i++){
    		num[i]+=a*(n-i+1);
    		if(num[i]/10>0){//存在溢出现象
    			num[i+1]=num[i]/10;//溢出位需要加的大小
    			num[i]=num[i]%10;//本位大小
    		}
    	}
		//把最高位逆一下,因为最高位存的数不一定是一位的
    	string s=to_string(num[n+1]);
    	reverse(s.begin(),s.end());
    	num[n+1]=stoi(s);
    	if(num[n+1]!=0)//最高位不为0
    		cout<<num[n+1];
    	for(int i=n;i>=1;i--){//逆序输出结果
    		cout<<num[i];
    	}
    	cout<<endl;
    }
	return 0;
}

🍩1357 百万富翁问题

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int ans=pow(2,30)-1;
	cout<<300<<" "<<ans;//等比数列求和
	return 0;
}

创作不易,点个赞吧~感兴趣的宝子欢迎关注本专栏和我们一起学习机试内容哦~

宝子们学习辛苦啦,休息下,我们下部分再见!👋( •̀ ω •́ )✧ ~

大家还想看哪个学校的机试题目,评论区告诉我~~~

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值