zoukankan      html  css  js  c++  java
  • 省赛训练赛赛题(简单题)

    小明的快乐
     

    Description

    某天早上,小明突然发现自己家里多了两个售货机A和B,如果向A机器中放入a枚硬币,A机器会吐出来2a+1枚硬币。如果向B机器投入a枚硬币,B机器会吐出来2a+2枚硬币,现在小明想获得n枚硬币,请你输出使用机器的顺序。

    注:开始时小明是没有硬币的。

    Input

     

    输入一行n(1 ≤n≤ 100000000).

    Output

     

    输出一行由A和B组成的字符串,代表使用机器的顺序。

    Sample Input 1 

    7

    Sample Output 1

    AAA

    Sample Input 2 

    10

    Sample Output 2

    ABB

    Hint

     对于样例1:硬币变化为0->1->3->7.

     AC代码:

    #include<iostream>
    #define int long long 
    using namespace std;
    string str,str1;
    int f;
    
    void fun(int n)
    {
        if(n == 0)
            return;
        int temp = (n - 1) % 2;
        f = (n - 1) / 2;
        if(temp == 0)
        {
            str.append("A");
            fun(f);
        }
        else
        {
            str.append("B");
            fun(f);
        }
    }
    
    signed main()
    {
        int n;
        cin >> n;
        fun(n);
        int len =  str.length();
        for(int i = len - 1;i >= 0;i--)
            cout << str[i];
        return 0;
    }
    小明的神奇矩阵
     

    Description

     

    今天上课老师给小明了几个n*m的矩阵,她希望小明能找到规律,并能举一反三,成为班级最聪明的人,你能帮他完成吗?

    老师给的矩阵如下:

    3*3::GNEV5FPQ@Q6I}Y_W@XO17E1.png

    4*4:QSGRBF[V4KI7%H(0FXFNW$3.png

    3*2:5{]3XZG1B2_46JWVO]A`NM2.png

    Input

     

    输入共一行,包含两个整数n和m。(1≤n,m≤1000)

    Output

     

    输出满足要求的矩阵。注:每行最后一个数的后面没有空格

    Sample Input 1 

    3 3

    Sample Output 1

    1 2 3
    8 9 4
    7 6 5

     AC代码:

    #include<bits/stdc++.h>
    #define long long int
    using namespace std;
    int num[1001][1001];
    
    signed main()
    {
        int n,m;
        cin >> m;
        cin >> n;
        int count = 1;
        int x = 0, y = 0;
        int dx = 0, dy = 1;
        if(m == 1)
        {
            for(int i = 0;i < n;i++)
            {
                if(i != n - 1)
                    cout << i + 1 << " ";
                else
                    cout << i + 1;
            }
        }else if(n == 1)
        {
            for(int i = 0;i < m;i++)
            {
                if(i != m - 1)
                    cout << i + 1 << endl;
                else
                    cout << i + 1;
            }
        }
        else
        {
            while (count <= m * n)
            {
                num[x][y] = count;
                x += dx;
                y += dy;
                if (dy == 1 && (y >= n - 1 || num[x][y+1] != 0))
                {
                    dx = 1;
                    dy = 0;
                }
                else if (dx == 1 && (x >= m - 1 || num[x+1][y] != 0))
                {
                    dx = 0;
                    dy = -1;
                } 
                else if (dy == -1 && (y <= 0 || num[x][y-1] != 0))
                {
                    dx = -1;
                    dy = 0;
                } 
                else if (dx == -1 && (x <= 0 || num[x-1][y] != 0))
                {
                    dx = 0;
                    dy = 1;
                }
                count++;
            }
            for(int i=0;i<m;i++)//输出矩阵
            {
                for(int j=0;j<n;j++)
                {
                    if(j != n - 1)
                        cout << num[i][j] << " ";
                    else
                        cout << num[i][j];
                }
                if(i != m - 1)
                    cout << endl;
            }
        }
        return 0;
    }
    有趣的区间
     

    Description

     

    小王老师最近迷上了区间问题。

    有一次,小王老师为了考考同学们,在黑板上出了一道智力题。

    他在黑板上写下了N个数,分别是A1,A2,A3...An.然后他问问大家在这串数中有多少个区间满足区间的和为K。

    【即有多少个连续非空的序列Al,A(l+1),A(l+2)...Ar的和为K(l<=r)】

    请你告诉他。

    Input

     

    第一行是两个正整数 N,K(1<=N<=200000,-pow(10,14)<=K<=pow(10,14)),分别代表数组长度和需满足条件的K。

    第二行输入N个数,分别是A1,A2,A3...An。(-pow(10,9)<=Ai<=pow(10,9))

    Output

     

    输出一行整数,表示在数组中有多少个区间满足区间和为K.

    Sample Input 1 

    6 3
    3 -2 -1 1 1 2

    Sample Output 1

    3

    Hint

    三个区间分别是【A1-->A1】,【A3-->A6】,【A5-->A6】

     AC代码:

    #include<bits/stdc++.h>
    #define long long int
    #define N 200000
    using namespace std;
    int a[N];
    
    signed main()
    {
        int n,k,flag = 0;
        cin >> n >> k;
        for(int i = 1;i <= n;i++)
        {
            cin >> a[i];
            if(a[i] == k)
                flag++;
        }
        
        for(int i = 1;i <= n;i++)
        {
            int temp = a[i];
            for(int j = i + 1;j <= n;j++)
            {
                temp += a[j];
                if(temp == k)
                    flag++;
            }
        }
        cout << flag << endl;
        return 0;
    }
     
  • 相关阅读:
    把CentOS改成中文
    String,StringBuffer,StringBuilder三者性能对比
    在Linux上部署安装C/C++开发环境
    Kali Linux安装ssh服务
    Kali VirtualBox安装增强功能
    CentOS安装docker
    CentOS安装jdk11
    Java基本数据类型
    奥卡姆剃刀定律在Java代码中的体现——记一次LeetCode刷题心得
    Java 实现简易登录注册功能
  • 原文地址:https://www.cnblogs.com/biaobiao88/p/12546793.html
Copyright © 2011-2022 走看看