🍰🍰🍰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;
}
创作不易,点个赞吧~感兴趣的宝子欢迎关注本专栏和我们一起学习机试内容哦~
宝子们学习辛苦啦,休息下,我们下部分再见!👋( •̀ ω •́ )✧ ~
大家还想看哪个学校的机试题目,评论区告诉我~~~