• 2016年江西理工大学C语言程序设计竞赛(初级组)


    问题 A: 木棒根数

    解法:把所有的情况保存下来,加一下就好

    #include<bits/stdc++.h>
    using namespace std;
    map<char,int>q;
    class P
    {
    public:
        int cmd(string s)
        {
            int sum=0;
            for(int i=0;i<s.length();i++)
            {
                sum+=q[s[i]];
            }
            return sum;
        }
    };
    int main()
    {
        string s;
        P solve;
        q['0']=6;
        q['1']=2;
        q['2']=5;
        q['3']=5;
        q['4']=4;
        q['5']=5;
        q['6']=6;
        q['7']=3;
        q['8']=7;
        q['9']=6;
        q['+']=2;
        q['-']=1;
        q['=']=2;
        cin>>s;
        cout<<solve.cmd(s)<<endl;
        return 0;
    }

    问题 B: 一个苹果都不给我

    解法:三种情况,单独买,套装买,和混合买

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    int main()
    {
        int n,m,p,q,ans[5];
        cin>>n>>m>>p>>q;
        ans[0]=n*m;
        ans[1]=n/p*q+(n%p)*m;
        ans[2]=(n/p+1)*q;
        sort(ans,ans+3);
        cout<<ans[0]<<endl;
        return 0;
    
    }

    问题 C: LED

     解法:保存图形,然后xjb搞

    include<stdio.h>
    #include<string.h>
    int main()
    {
        char num1[50]={" _     _  _     _  _  _  _  _ "};
        char num2[50]={"| |  | _| _||_||_ |_   ||_||_|"};
        char num3[50]={"|_|  ||_  _|  | _||_|  ||_| _|"};
        char str,a[50]={""};
        int i,k,j,len;
        scanf("%s",a);
        len=strlen(a);
        for(i=0;i<len;++i)
        {
            j=a[i]-'0';
            k=j*3;
            printf("%c%c%c",num1[k],num1[k+1],num1[k+2]);
        }
        printf("
    ");
        for(i=0;i<len;++i)
        {
            j=a[i]-'0';
            k=j*3;
            printf("%c%c%c",num2[k],num2[k+1],num2[k+2]);
        }
        printf("
    ");
        for(i=0;i<len;++i)
        {
            j=a[i]-'0';
            k=j*3;
            printf("%c%c%c",num3[k],num3[k+1],num3[k+2]);
        }
        printf("
    ");
        return 0;
    }

    问题 D: 路是自己选的

    解法:应该都看出奇偶性关系了,一种是利用二进制,一种是二分,结果需要倒过来输出,所以使用了栈

    #include<bits/stdc++.h>
    using namespace std;
    const int MAXN=1000005;
    int b[MAXN];
    int main()
    {
        int x;
        int a[100];
        scanf("%d",&x);
        for(int i=0;i<64;i++)
        {
            scanf("%d",&a[i]);
            b[a[i]]=i;
        }
        int u=b[x];
        u=64+u;
        stack<char> s;
        while(u!=1)
        {
            if(u%2==0) s.push('L');else s.push('R');
            u=u/2;
        }
        while(!s.empty())
        {
            putchar(s.top());
            s.pop();
        }
        puts("");
        return 0;
    }

    问题 E: All roads lead to rome

    解法:标准解法是dp,然而可以用组合数学来做,也就是C(n,m)

    #include <iostream>
    #include <cmath>
    using namespace std;
    int main(){
        int n,m,l,r;
        int a,b,c,d,ans=1;
        cin>>n>>m>>a>>b>>c>>d;
        l=abs(a-c),r=abs(d-b);
        for(int i=l+r;i>l;i--){
            ans=ans*i/(l+r-i+1);
        }
        cout<<ans<<endl;
    }

    问题 F: 找不到北

    解法:求最短路最好利用bfs,当然dfs也能做到(一道基础的搜索题)

    #include<bits/stdc++.h>
    using namespace std;
    int inf=(1<<31)-1;
    int Mx;
    char m[12][12]={
    "##########",
    "#**#***#*#",
    "#*#**##*##",
    "#***##***#",
    "##**#*#**#",
    "#***#*#**#",
    "#**#*****#",
    "#****###*#",
    "#***#**#*#",
    "##########",
    };
    int a,b,c,d;
    void dfs(int x,int y,int s)
    {
        if(m[x][y]=='#')
        {
            return;
        }
        else if(x==c&&y==d)
        {
            Mx=min(Mx,s);
        }
        s++;
        m[x][y]='#';
        dfs(x,y-1,s);
        dfs(x,y+1,s);
        dfs(x+1,y,s);
        dfs(x-1,y,s);
        m[x][y]='*';
    }
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            Mx=inf;
            cin>>a>>b>>c>>d;
            if(m[a][b]=='#'||m[c][d]=='#')
            {
                cout<<"-1"<<endl;
                continue;
            }
            else if(a==c&&b==d)
            {
                cout<<"0"<<endl;
                continue;
            }
            else
            {
                dfs(a,b,0);
                if(Mx==inf)
                {
                    cout<<"-1"<<endl;
                }
                else
                {
                   cout<<Mx<<endl;
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    Python之路,Day2
    Dnsmasq安装与配置-搭建本地DNS服务器 更干净更快无广告DNS解析
    bind+dlz+mysql实现区域记录动态更新
    SUSE下FTP服务器搭建
    最简单粗暴的http文件列表
    shell脚本监控MySQL服务是否正常
    解决问题:Jupyter Notebook启动不会自动打开浏览器,每次都要自己打开浏览器输入网址
    让Jupyter Notebook个性化
    数据预处理小结
    多模型融合推荐算法
  • 原文地址:https://www.cnblogs.com/yinghualuowu/p/6130966.html
Copyright © 2020-2023  润新知