201903-1 小中大
有点坑,注意除不尽要四舍五入保留一位小数,注意整数要除以2.0
#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
#include <iomanip>
using namespace std;
int main(int argc, char** argv) {
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++){
cin>>a[i];
}
if(a[0]>=a[n-1]){
cout<<a[0]<<" ";
}else{
cout<<a[n-1]<<" ";
}
if(n%2==0){
if((a[n/2]+a[n/2-1])%2!=0){
cout<<fixed<<setprecision(1)<<(a[n/2]+a[n/2-1])/2.0<<" ";
}else{
cout<<(a[n/2]+a[n/2-1])/2<<" ";
}
}else{
cout<<a[n/2]<<" ";
}
if(a[0]>=a[n-1]){
cout<<a[n-1];
}else{
cout<<a[0];
}
return 0;
}
201903-2 二十四点
主要考栈的操作还有栈实现中缀表达式
复习一下栈
#include<stack>
stack<int> q;
int n;
q.push(n);
q.top();
q.pop();
q.size();
q.empty();
思路是B站曾经看过的Java课程
#include<iostream>
#include<stack>
#include<algorithm>
#include<string>
using namespace std;
int getPriority(char s1);
int result(int num1,int num2,char oper);
int main()
{
int n;
cin>>n;
string s;
stack<int> num;
stack<char> oper;
int temp,num1,num2,res,opers;
for(int i=0;i<n;i++){
cin>>s;
for(int j=0;j<s.length();j++){
temp=s[j]-'0';
if(temp>=0&&temp<=9){
num.push(temp);
}else{
if(oper.empty()){
oper.push(s[j]);
} else{
if(getPriority(s[j])>getPriority(oper.top())){
oper.push(s[j]);
}else{
num1=num.top();
num.pop();
num2=num.top();
num.pop();
opers=oper.top();
oper.pop();
res=result(num1,num2,opers);
num.push(res);
oper.push(s[j]);
}
}
}
}
while(!oper.empty()) {
num1=num.top();
num.pop();
num2=num.top();
num.pop();
opers=oper.top();
oper.pop();
res=result(num1,num2,opers);
num.push(res);
}
if(num.top()==24) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
num.pop();
}
return 0;
}
int getPriority(char s1){
if(s1=='x'||s1=='/'){
return 1;
}else if(s1=='+'||s1=='-'){
return 0;
}else{
return -1;
}
}
int result(int num1,int num2,char oper){
int res;
switch(oper){
case '+':
res=num1+num2;
break;
case '-':
res=num2-num1;
break;
case 'x':
res=num1*num2;
break;
case '/':
res=num2/num1;
break;
default:
break;
}
return res;
}