蓝桥杯
填字母游戏
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int fun(string x){ 5 if(x.find("LOL") != -1)return -1; //输 6 if(x.find("*") == -1)return 0; //平局 7 int res = -1; //还有*,没有LOL 8 for(int i = 0;x[i];i++) 9 if(x[i] == '*'){ 10 x[i] = 'L'; 11 res = max(res,-fun(x)); 12 if(res == 1)return x[i] = '*',1; 13 x[i] = 'O'; 14 res = max(res,-fun(x)); 15 x[i] = '*'; 16 if(res==1) return 1; 17 } 18 return res; 19 } 20 int main(){ 21 freopen("a.txt", "r", stdin); 22 int t; 23 cin >> t; 24 while(t--){ 25 string x; 26 cin >> x; 27 cout << fun(x) << endl; 28 } 29 return 0; 30 }
小计算器
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 typedef long long ll; 5 string toAns(ll n, int ne)//10进制转化为任意进制 6 { 7 if (n == 0)return "0"; 8 string str; 9 while (n) 10 { 11 int tm = n % ne; 12 if (tm <= 9) { str += '0' + tm; } 13 else { str += 'A' + tm - 10; } 14 n /= ne; 15 } 16 reverse(str.begin(), str.end()); 17 return str; 18 } 19 20 ll toTen(string str, int ne)//任意进制转化为10进制 21 { 22 ll ans = 0, arg = 1; 23 for (int i = str.size() - 1; i >= 0; --i) 24 { 25 if (str[i] <= '9') { ans += (str[i] - '0')*arg; } 26 else { ans += (str[i] - 'A' + 10)*arg; } 27 arg *= ne; 28 } 29 return ans; 30 } 31 ll getOper(ll a, ll b, string op) 32 { 33 if (op == "ADD") { return a + b; } 34 else if (op == "SUB") { return a - b; } 35 else if (op == "MUL") { return a * b; } 36 else if (op == "DIV") { return a / b; } 37 else { return a % b; } 38 } 39 int main() 40 { 41 freopen("input1.txt", "r", stdin); 42 int n; 43 while (cin >> n) 44 { 45 ll ans = 0; 46 int ne = 10; 47 string str, old; 48 while (n--) 49 { 50 cin >> str; 51 if (str == "CLEAR") { str.clear(); old.clear(); } 52 else if (str == "EQUAL") { old.clear(); cout<< toAns(ans, ne) << endl; } 53 else if (str == "CHANGE") { cin >> ne; } 54 else if (str == "NUM"&&old.empty()) { cin >> str; ans = toTen(str, ne); } 55 else if (str == "NUM" && !old.empty()) 56 { 57 cin >> str; ans = getOper(ans, toTen(str, ne), old); 58 } 59 else { old = str; } 60 } 61 } 62 return 0; 63 }
基础练习 十六进制转八进制
十六进制先转为二进制,再转为八进制
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 int main() 5 { 6 //freopen("input1.txt","r",stdin); 7 int n; 8 cin>>n; 9 for(int k=1;k<=n;k++) 10 { 11 string s1,s2;//s1为输入的原始的十六进制串,s2为转化成的二进制串 12 cin>>s1; 13 s2="";//初始化 14 for(int i=0;i<s1.length();i++)//遍历,字符串上加上每一位 15 { 16 switch(s1[i]) 17 { 18 case '0':s2+="0000";break; 19 case '1':s2+="0001";break; 20 case '2':s2+="0010";break; 21 case '3':s2+="0011";break; 22 case '4':s2+="0100";break; 23 case '5':s2+="0101";break; 24 case '6':s2+="0110";break; 25 case '7':s2+="0111";break; 26 case '8':s2+="1000";break; 27 case '9':s2+="1001";break; 28 case 'A':s2+="1010";break; 29 case 'B':s2+="1011";break; 30 case 'C':s2+="1100";break; 31 case 'D':s2+="1101";break; 32 case 'E':s2+="1110";break; 33 case 'F':s2+="1111";break; 34 default:break; 35 } 36 } 37 int len=s2.length(); 38 39 if(len%3==1)//三个二进制为一位八进制,二进制串前面补0,确保二进制串的长度为3的倍数 40 s2="00"+s2; 41 else if(len%3==2) 42 s2="0"+s2; 43 int flag=0; 44 for(int i=0;i<=s2.length()-3;i+=3) 45 { 46 int num=4*(s2[i]-'0')+2*(s2[i+1]-'0')+(s2[i+2]-'0'); 47 if(num) 48 flag=1;//忽略前导0 49 if(flag) 50 cout<<num; 51 } 52 cout<<endl; 53 } 54 return 0; 55 }
基础练习 数列排序
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 int main() 5 { 6 vector<int>a; 7 int n,tmp; 8 cin>>n; 9 for(int i=0;i<n;i++){ 10 cin>>tmp; 11 a.push_back(tmp); 12 } 13 sort(a.begin(),a.end()); 14 for(int i=0;i<n;i++) cout<<a[i]<<' '; 15 return 0; 16 }

浙公网安备 33010602011771号