总体难度较程设考试题而言,偏简单,考试的签到题会难一点,难题也会难一点。
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&