蓝桥杯

填字母游戏

 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 }

 

posted @ 2021-07-22 16:56  弥一  阅读(75)  评论(0)    收藏  举报