湘潭大学2018年上学期程序设计实践模拟考试1参考题解

这个博客不再更新,新博客地址请戳

总体难度较程设考试题而言,偏简单,考试的签到题会难一点,难题也会难一点。
OJ需要用校园网才能进去。


A 三个数 http://172.22.112.249/exam/index.php/problem/exam_read/id/1384/exam_id/160

思路:
不难想到,如果要让式子等于0,那么式子中一定要有一个减号。
有a+b-c=0 a*b-c=0两种形式。
签到题一般会比这个难。

参考代码:

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

int main(){
    int t;cin>>t;
    while(t--){
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);
        int ok=0;

        if(a+b==c)ok=1;
        if(a+c==b)ok=1;
        if(b+c==a)ok=1;

        if(a==c*b)ok=1;
        if(a==b*c)ok=1;
        if(b==a*c)ok=1;

        if(a*b==c)ok=1;
        if(a*c==b)ok=1;
        if(b*c==a)ok=1;

        if(b==c*a)ok=1;
        if(c==b*a)ok=1;
        if(c==a*b)ok=1;

        if(ok)puts("Yes");
        else puts("No");
    }
    return 0;
}

B 奇怪的数字 http://172.22.112.249/exam/index.php/problem/exam_read/id/1385/exam_id/160

思路:
题目说了从n中抽出1位作为x,剩余组成y。
那么我们枚举从1到9枚举x,从1到1e6枚举y,得到n=x*y。
然后把n拆分计数,再把x和y分别拆分计数,如果数码完全相同就压入set。

参考代码:

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

bool check(int i,int j,int n){
    int vis[10]={0};
    while(n){
        int a=n%10;
        n/=10;
        vis[a]++;
    }
    while(i){
        int a=i%10;
        i/=10;
        vis[a]--;
    }
    while(j){
        int a=j%10;
        j/=10;
        vis[a]--;
    }
    for(int i=0;i<10;i++)if(vis[i]!=0)return 0;
    return 1;
}

set<int> vec;

int main(){
    for(ll  i=0;i<10;i++){
        for(ll j=i+1;j<=1e6;j++){
            ll n=i*j;
            if(n>1e6)break;
            if(check(i,j,n)){
                vec.insert(n);
            }
        }
    }
    for(set&
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值