3.スイカスイカスイカスイカスイカ水?シーザーのパスワード、小数の和、小数は小数をプラスして、整数の降順は並べて、最も小数を削除して、キーボードによって、コラッツは推測して、ハッシュの数、行列の加算


以下のすべての問題はプログラマから提供されています.ありがとうございます.
  • フルカスタマイズ
  • 6キーボードを打つ問題:時間がかかります.

  • 1.スイカスイカスイカスイカスイカ水?


    問題の説明


    長さはn「スイカスイカスイカスイカ数…」関数を完了し、同じモードを維持する文字列を返します.例えば、nが4であれば「スイカ数」、3であれば「スイカ数」を返します.

    せいげんじょうけん

  • nは、長さが10000以下の自然数である.
  • に答える

    #include <string>
    #include <vector>
    
    using namespace std;
    
    string solution(int n) {
        string answer = "";
        vector <string> water_melon = {"수","박"};
        for (int i = 0; i < n; i++)
            answer += water_melon[i % 2];
        return answer;
    }

    説明:

  • パリティで出力されます.
  • 2.起動パスワード


    問題の説明


    1つの暗号化方法は、1つの文の各アルファベットを一定の距離で伸ばし、別のアルファベットに変換することです.例えば、「AB」は1で「BC」、3で「DE」を表す.「z」が1に等しいと「a」になります.文字列sと距離nを入力し、sがnの暗号文の関数を生成し、ソリューションを完了します.

    せいげんじょうけん

  • スペースはいくら押しても空いています.
  • sには、小文字、大文字、スペースのみが含まれます.
  • sの長さは8000未満です.
  • nは1以上25以下の自然数です.
  • に答える

    #include <string>
    #include <vector>
    
    using namespace std;
    
    string solution(string s, int n) {
        string answer = "";
        for(int i = 0; i < s.size(); i++)
        {
            if(s[i] >= 'A' && s[i] <= 'Z'){
                answer += 'A' + (s[i] - 'A' + n) % 26;
            }
            else if(s[i] >= 'a' && s[i] <= 'z')
                answer +='a' + (s[i] - 'a' + n) % 26;
            else
                answer += s[i];
            }
        return answer;
    }

    説明:

  • という問題を26に分けた場合、残りの値で解くと簡単です.
  • 3.薬水の和


    問題の説明


    整数nを受け入れ、nのすべての約数加算値を返す関数は、解を完了してください.

    せいげんじょうけん

  • nは0または3000以下の整数です.
  • に答える

    #include <string>
    #include <vector>
    
    using namespace std;
    
    int solution(int n) {
        int answer = 0;
        for (int i = 1; i <= n; i++)
        {
            if(n % i == 0)
                answer+= i;
        }
        return answer;
    }

    説明:

  • を等しいで割る!
  • 4.数値桁数の追加


    問題の説明


    自然数Nが与えられた場合,Nの各数の和を求め,返される解関数を求める.
    たとえば、N=123の場合、1+2+3=6を返します.

    せいげんじょうけん


    Nの範囲:10000000以下の自然数

    に答える

    #include <iostream>
    
    using namespace std;
    int solution(int n)
    {
        int answer = 0;
        string save = to_string(n);
        for(int i = 0; i < save.size(); i++)
        {
            answer += save[i] - '0';
        }
        return answer;
    }

    説明:

  • 桁で加算し、文字列でアクセスすると解きやすい!
  • 5.整数降順で配置


    問題の説明


    関数解は、パラメータ入力として整数nを受け入れる.nの各ビット数を大きいから小さい順に並べ替えてください.例えば、nが118372の場合、873211が返される.

    せいげんじょうけん

  • nは、8000000000を超える自然数です.
  • に答える

    #include <string>
    #include <vector>
    #include <algorithm>
    using namespace std;
    
    bool compare(char a, char b)
    {
        return a > b;
    }
    
    long long solution(long long n) {
        long long answer = 0;
        string save = to_string(n);
        sort(save.begin(), save.end(),compare);
        answer = stol(save);
        return answer;
    }

    説明:

  • to stringを利用して、簡単に解けました.
  • 6.最小の数を除く


    問題の説明


    整数の配列を保存し、arrから最小数の配列を削除する関数を返します.解決策を完了してください.ただし、返される配列が空の配列の場合は、配列に-1を入力して返します.たとえばarrが[4,3,2,1]の場合は[4,3,2]を返し、[10]の場合は[1]を返します.

    せいげんじょうけん

  • arrは、長さが1より大きい配列である.
  • インデックスi,jについて、i≠jの場合、arr[i]≠arr[j]である.
  • に答える


    '''
    #include
    #include
    #include
    #include
    using namespace std;
    vector solution(vector arr) {
    vector answer;
    int min = *min_element(arr.begin(), arr.end());
    arr.erase(find(arr.begin(),arr.end(), min));
    answer = arr;
    if(answer.size() == 0)
    answer.push_back(-1);
    return answer;
    }
    '''

    説明:

  • の最高値を得るには、for構文を使用してすべての要素を比較しますが、
  • コード*min要素を使用して最小値を求めます.
  • arr.erase(find(arr.begin(),arr.end(), min))
  • findで必要なインデックスを取得し、すぐに削除できます.
  • 7.[Kaka実習生]キーボードをクリック


    問題の説明



    スマートフォンの電話キーボードの各スペースには、次の数字があります.
    この電話のキーボードには、左手と右手の親指で数字を入力したいだけです.
    最初の左手親指は*キーボードから始まり、右手親指は#キーボードの位置から始まり、親指を使うルールは以下の通りです.
    親指は上下左右4方向にしか移動できず、キーボードを動かすセル距離は1です.
    左の列に1、4、7の数字を3つ入力する場合は、左手親指を使用します.
    右の列の3つの数字3、6、9を入力する場合は、右手親指を使用します.
    中間列の4つの数字2、5、8、0を入力する場合は、2つの親指の現在のキーボード位置に近い親指を使用します.
    4-1. 2つの親指の距離が等しい場合は、右利きは右手親指、左利きは左手親指を使用します.
    solution関数を完了して順序番号を示す配列番号、左利きか右利きかを示す文字列番号をパラメータとすると、各番号の親指が左手か右手かを示す連続文字列形式で返されます.

    [制限]

  • numbers配列のサイズは1000を超えません.
  • numbers配列要素の値は0または9以下の整数です.
  • 手は「左」または「右」です.
  • 「左」は左利き、「右」は右利きを表す.
  • 左手親指を使用する場合はL、右手親指を使用する場合はRとなり、順番に接続され、文字列形式で返されます.

    に答える

    #include <string>
    #include <vector>
    #include <cstdlib>
    using namespace std;
    
    string solution(vector<int> numbers, string hand) {
        string answer = "";
        int LR_pos[] = {10,10};
        int value[] = {0, 0};
        int LR_count[] = {0 ,0};
        for(int i = 0; i < numbers.size(); i++)
        {
            if(numbers[i] == 1 || numbers[i] == 4 || numbers[i] == 7)
            {
                answer += "L";
                LR_pos[0] = numbers[i];
            }
            else if(numbers[i] == 3 || numbers[i] == 6 || numbers[i] == 9)
            {
                answer += "R";
                LR_pos[1] = numbers[i] - 2;
            }
            else
            {
                if (0 == numbers[i])
                    numbers[i] = 11;
                for (int j =0; j < 2; j++)
                {
                    if(LR_pos[j] == 2 || LR_pos[j] == 5 || LR_pos[j] == 8 || LR_pos[j] == 11)
                        LR_count[j] = abs(LR_pos[j] - numbers[i]) / 3;  
                    else
                    {
                        LR_count[j] = (abs(LR_pos[j] + 1 - numbers[i]) / 3) + 1;
                    }
                }
                if (LR_count[0] < LR_count[1])
                { 
                    LR_pos[0] = numbers[i];
                    answer += "L";
                }
                else if(LR_count[0] > LR_count[1])
                {
                    LR_pos[1] = numbers[i];
                    answer += "R";
                }
                else 
                    if (hand == "right")
                    {
                        LR_pos[1] = numbers[i];
                        answer += "R";
                    }
                    else
                    {
                        LR_pos[0] = numbers[i];
                        answer += "L";
                    }
            }
        }
        return answer;
    }

    説明:

  • 2,5,8,0以外の数字は指定の指で押すしかないので、LかRかを直接処理できます.
  • で、必要に応じて2,5,8,0を押します.
  • には2つのケースがあり、
  • 今私の指は、1,4,7、*の上に
  • あります.
    もし私が今指の位置も2、5、8、0の上にいたら.
  • 指は2、5、8、0の上にある必要があり、垂直に移動するだけであるため、
    LR_count[j] = abs(LR_pos[j] - numbers[i]) / 3; 
  • というコードを使用して解決する.
  • 1、4、7、*の上にある場合は、もう一度移動して垂直に移動する必要があるので、
    LR_count[j] = (abs(LR_pos[j] + 1 - numbers[i]) / 3) + 1;
    で解決します.
  • 残りの
  • は移動回数を比較して印刷します.
  • 8.コーラの推測


    問題の説明


    1937年にCollatzが提案したこの推測は,与えられた数が1になる前に次のタスクを繰り返し実行すれば,すべての数を1にすることができるということである.操作は次のとおりです.
  • 1-1. 入力した数字が偶数の場合は2に分けられます.
  • 1-2. 入力した数字が奇数の場合、3を掛けて1を加算します.

  • 結果が
  • の数字について、1まで同じ操作を繰り返します.
  • 例えば、入力された数字が6であれば、6→3→10→5→16→8→4→2→1の計8回が1となる.上記の操作を何回繰り返すかを示す関数を返します.解決策を完了します.ただし、タスクを500回繰り返しても1未満の場合は、-1を返します.

    せいげんじょうけん


    入力された数値numは1または800000未満の整数です.

    に答える

    #include <string>
    #include <vector>
    
    using namespace std;
    
    int solution(int num) {
        int answer = -1;
        int i = 0;
        long long save = (long long)num; 
        for (answer = 0; save != 1 && answer < 502; answer++)
        {
            if(save % 2 == 0)
                save = save / 2;
            else
                save = (save * 3) + 1;
        }
        if (answer > 500)
            answer = -1;
        return answer;
    }

    説明:

  • は簡単だと思いますが、問題には罠があります.
  • メガ変数で受信したnumはint型でnum*3を繰り返す必要があるため、範囲外になる可能性があります.
  • に対してlong longに変換される.
  • 9.ハザード数


    問題の説明


    正の整数xを下のスケール数にするには、xをxの桁数の和で除算する必要があります.例えば、18の桁数の和は1+8=9であり、18は9で除算されるので、18は下付き文字数となる.自然数xを入力し、xがハザード数の関数かどうかをチェックし、解を完了します.

    せいげんじょうけん

  • xは、1または10000より大きい整数である.
  • に答える

    #include <string>
    #include <vector>
    
    using namespace std;
    
    bool solution(int x) {
        bool answer = true;
        string tmp;
        int value = 0;
        tmp = to_string(x);
        
        for(int i; i < tmp.size(); i++)
        {
            value += tmp[i] - '0';
        }
        if (x % value != 0)
            answer = false;
        return answer;
    }

    説明:

  • 省略

    10.行列の加算


    問題の説明


    行列の加算は、2つの同じ行列の同じ行、同じ列の値を加算した結果です.2つのマトリクスarr 1とarr 2を入力し、マトリクス加算結果の関数を返し、解を完了します.

    せいげんじょうけん

  • 行列arr 1、arr 2の行および列の長さは500を超えない.
  • に答える

    #include <string>
    #include <vector>
    
    using namespace std;
    
    vector<vector<int>> solution(vector<vector<int>> arr1, vector<vector<int>> arr2) {
        vector<vector<int>> answer;
        for (int i = 0; i < arr1.size(); i++)
        {
            answer.push_back(arr1[i]);
            for (int j = 0; j< arr1[i].size(); j++)
            {
                answer[i][j] += arr2[i][j];
            }
        }
        return answer;
    }

    説明:

  • メガ変数で与えられたarr 1を答えとする腕立て伏せ.
  • これはユニークなアイデアですが、コードは想像以上に簡潔です.
  • push backを送り返したarr 1は答えを変えても変わらない.
  • push back時の値が
  • を超える