5. 多功能的结构体
题目ID:7213必做题100分
最新提交:
Wrong Answer
0 分
历史最高:
Wrong Answer
0 分
时间限制: 2000ms
空间限制: 256000kB
题目描述
你需要建立一个包含(a,b,c)的结构体,并支持以下函数:
Sort():使a,b,c从小到大排序
Swap(int type):
如果type=1,则交换a,b
如果type=2,则交换b,c
如果type=3,则交换a,c
Calc():输出算式gcd(a,b)*gcd(b,c) mod 100000+a+b+c的值
提示:gcd(a,b)代表求a和b的最大公因数
共n个结构体,给出指令,按指令输出
输入格式
给出n个结构体,每个结构体所占行数不定.
对于每个结构体中: 第一行三个正整数(a,b,c). 第二行一个正整数m .表示操作数. 接下来m行描述每个操作.
约定操作的格式如下:
Sort(): S
Swap(int type): Sw a(一个整数)
Calc(): C
输出格式
对于每个Calc()操作,输出一行表示答案
样例
Input 1
2 2 1 3 3 S Sw 3 C 2 2 2 2 S C
Output 1
7 10
样例解释
无
数据范围
对于100%的数据,满足n ≤ 100000,操作总数小于100000
我的代码:
#include<bits/stdc++.h>
using namespace std;
int a,b,c;
void So(){
int minnum=1e9,maxnum=-1e9,sum=a+b+c;
minnum=min(a,min(b,c));
maxnum=max(a,max(b,c));
a=minnum;
c=maxnum;
b=sum-maxnum-minnum;
}
void Sw(int n){
if(n==1)swap(a,b);
else if(n==1)swap(b,c);
else if(n==1)swap(a,c);
}
void Calc(){
int r=1,s1=0,s2=0;
int d=a,e=b;
while(r){
r=d%e;
if(r==0){
s1=e;
break;
}
d=e;
e=r;
}
d=b;
e=c;
r=1;
while(r){
r=d%e;
if(r==0){
s2=e;
break;
}
d=e;
e=r;
}
cout<<(s1*s2)%100000+a+b+c<<endl;
r=1;
}
int main(){
int n,k,m;
cin>>n;
string f;
for(int i=1;i<=n;i++){
a=0;
b=0;
c=0;
cin>>a>>b>>c;
cin>>k;
for(int j=1;j<=k;j++){
cin>>f;
if(f=="S"){
So();
}else if(f=="C"){
Calc();
}else{
cin>>m;
Sw(m);
}
}
}
}