zoukankan      html  css  js  c++  java
  • 习题训练计划 2020 05 22

    A题:

    分析等式,设等是左边x的系数为p,则p*x=n,由于第一项的系数一定一定为1,而后面的系数一定是2^i,偶数,故p一定为奇数,于是我就把n从3开始除以奇数,如果能整除,n/p就是结果,然后WA了。

    其实p应该=2^0+2^1+2^2+…+2^I,把这些数写出来不难发现他们之间的规律,后一个数=前一个数*2+1,代码如下:

    #include<bits/stdc++.h>

    using namespace std;

    typedef long long ll;

    int main()

    {

        int n,i,j,k,m,t;

        cin>>t;

        while(t--)

        {

            j=3;

            cin>>n;

           while(n%j!=0)

           {

               j=1+2*j;

           }

           cout<<n/j<<endl;

        }

        return 0;

    }

    大水题,错误原因是分析的不彻底。

    B题:

    感觉比A难一点,也挺水的。

    首先要保证n/2为偶数。

    然后根据样例,先输出从2开始的偶数,共n/2个,然后输出从1开始的奇数,共计n/2-1个,最后输出偶数部分的和减去已经输出的奇数部分的和,代码如下:

    #include<bits/stdc++.h>

    using namespace std;

    typedef long long ll;

    int main()

    {

        int t,n,i,j,k;

        cin>>t;

        while(t--)

        {

            cin>>n;

            k=n/2;

            if(k&1)

            {

                cout<<"NO"<<endl;

                continue;

            }

            else

            {

                cout<<"YES"<<endl;

                int m=2;

                int sum=0;

                for(i=0;i<k;i++)

                {

                    cout<<m<<' ';

                    sum+=m;

                    m+=2;

                }

                m=1;

                for(i=0;i<k-1;i++)

                {

                    cout<<m<<' ';

                    sum-=m;

                    m+=2;

                }

                cout<<sum<<endl;

            }

        }

        return 0;

    }

    C题:

    x、y、z要满足三角形任意两边之和大于第三第三边,及=即较小的两条边的和大于最大的边,即x+y>z,题目保重答案一定存在,所以只需要让x和y取最大值,z取最小值即可,代码如下:

    #include<bits/stdc++.h>

    using namespace std;

    typedef long long ll;

    int main()

    {

        int a,b,c,d,x,y,z;

        int t;

        cin>>t;

        while(t--)

        {

            cin>>a>>b>>c>>d;

            x=b;

            y=c;

            z=c;

            cout<<x<<' '<<y<<' '<<z<<' ';

        }

        return 0;

    }

    D题:

    开始的思路是对两种方法进行比较,发现如果h>40就用第一种方法,h<=40用第二种方法,后来发现这样做样例1的最后一个点过不了。原因是理解错题意了。

    正确思路是先进行第一种方法,直到使用完或者使用后h的值不再减少,然后再用第二种方法,最后判断h的值是正还是负,代码如下:

    #include<bits/stdc++.h>

    using namespace std;

    typedef long long ll;

    int main()

    {

        int t,n,m,i,j,k,l,v,x;

        cin>>t;

        int h;

        while(t--)

        {

            cin>>h>>n>>m;

            int flag=1;

            if(h<=m*10)

            {

                cout<<"YES"<<endl;

                continue;

            }

           while(n>0)

           {

               if(h/2+10<h)

               {

                   h=h/2+10;

                   n--;

               }

               else

               {

                   break;

               }

           }

           while(m>0)

           {

               h-=10;

               m--;

           }

           if(h<=0)

           {

               cout<<"YES"<<endl;

           }

           else

           {

               cout<<"NO"<<endl;

           }

        }

        return 0;

    }

    E题:

    水题。找规律,如果n是偶数就输出n/2-1;如果是奇数就输出n/2,代码如下:

    #include<bits/stdc++.h>

    using namespace std;

    typedef long long ll;

    int main()

    {

        int t,i,j,k,n,m;

        cin>>t;

        while(t--)

        {

            cin>>n;

            if(n&1)

            {

                cout<<n/2<<endl;

            }

            else

            {

                cout<<n/2-1<<endl;

            }

        }

        return 0;

    }

    F题:

    思路很简单,循环输出从‘a’开始的字母,循环b次后再从’a’开始,直到输出n次,WA了一次是忘了换行。代码如下:

    #include<bits/stdc++.h>

    using namespace std;

    typedef long long ll;

    int main()

    {

        int t,n,m,i,j,k,a,b;

        cin>>t;

        char re='a';

        while(t--)

        {

            cin>>n>>a>>b;

            k=0;

            m=0;

            while(1)

            {

                for(i=0;i<b;i++)

                {

                    printf("%c",re+i);

                    k++;

                    if(k==n)

                    {

                        m=1;

                        break;

                    }

                }

                if(m==1)

                {

                    break;

                }

            }

            cout<<endl;

        }

        return 0;

    }

  • 相关阅读:
    系列化与反系列化
    改造一下C# Substring()函数
    在C#后端处理一些结果然传给前端Javascript或是jQuery
    ASP.NET MVC传送参数至服务端
    MySQL 操作命令梳理(3)-pager
    MySQL 操作命令梳理(2)-alter(update、insert)
    redis持久化策略梳理及主从环境下的策略调整记录
    php-redis扩展模块安装记录
    centos下部署redis服务环境及其配置说明
    Iptables 规则用法小结
  • 原文地址:https://www.cnblogs.com/chengxvzhishen/p/12950355.html
Copyright © 2011-2022 走看看