NiukeプログラミングサミットS2ゲーム10-ブロンズ&シルバー&ゴールド問題解決レポート

数学実験

数学実験トピックリンク
トピック説明
ニウニウは数学実験を行っています。
先生はニウニウに番号nnを与えましたn1≤n≤10181≤n≤10^ {18}1n1 01 8)、Niuniuは、最終的な数値が変更されなくなるまで、すべての桁の値を継続的に乗算する必要があります。
Niuniuが計算するのを手伝ってください、生成される最終的な数は何ですか?
入力サンプル

55

サンプル出力

0

55-> 5 * 5 = 25-> 2 * 5 = 10-> 1 * 0 = 0
質問の意味に従って直接記述し、最終的な戻り値は0〜9です。

class Solution {
    
    
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 
     * @param n long长整型 老师给牛牛的数字
     * @return int整型
     */
    int mathexp(long long n) {
    
    
        // write code here
        int a[20] = {
    
    0};
        if(n >= 0 && n <= 9) return n;
        else
        {
    
    
            while( n > 9)
            {
    
    
                long long t = n;
                int idx = 0;
                while(t > 0)
                {
    
    
                    a[idx++] = t%10;
                    t /= 10;
                }
                int cnt = 1;
                for(int i = 0; i < idx; i++)
                    cnt *= a[i];
                n = cnt;
            }
            return n;
        }
    }
};

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
# 
# @param n long长整型 老师给牛牛的数字
# @return int整型
#
class Solution:
    def mathexp(self , n ):
        # write code here
        ans = n;
        while ans > 9:
            t = ans
            now = 1
            while t:
                now *= t%10
                t //= 10
            ans = now
        return ans

奇妙な分類の問題

奇妙な並べ替えの問題タイトルリンク
タイトルの説明
遊び場にnnがありますn人が一列に並んでいる、このnnn身長はそれぞれ異なり、1人からnn人までの身長とみなすことができます。nの配置。
このとき、チームを昇順、つまり短いものから高いものに並べ替える必要があります。
一度に1人ずつ選んで、後ろの人より背が高くなったり背が低くなったりすることができます。相手より背が高い場合は、ポジションを切り替えて、相手より背が低くなるか、チームの最後になるまで次の比較を続けます。
ここで、番号nと1からnnを指定します。nの配置は、選択肢の数を最小限に抑え、チームを昇順にします。
入力サンプル

4,[4,1,2,3]

サンプル出力

1

n≤106n \ leq 10 ^ 6 n1 06
データには整数nnが含まれていますnnnを含むものチームの頭から終わりまでの人の身長を表すn個の要素の配列。答えを示す整数を出力します。
ここに写真の説明を挿入

class Solution {
    
    
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 
     * @param n int整型 
     * @param a int整型vector 
     * @return int整型
     */
    int wwork(int n, vector<int>& a) {
    
    
        // write code here
        int result = 0;
        for(int i=0;i<a.size();i++)
        {
    
     
            for(int j=i+1;j<a.size();j++)
            {
    
     
                if(a[j]<a[i])
                {
    
     
                    result++; 
                    break;
                }
            }
        }
        return result;
    }
};

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
# 
# @param n int整型 
# @param a int整型一维数组 
# @return int整型
#
class Solution:
    def wwork(self , n , a ):
        # write code here
        minn = n + 1
        ans = 0
        for i in range(n-1, -1, -1):
            if a[i] > minn:
                ans += 1
            minn = min(minn, a[i])
        return ans

XORと

XORとトピックリンク
トピックの説明
NiuNiuは最近、排他的OR演算を学習したため、関数f(x)=x⊕(x − 1)f(x)= x \ oplus(x-1)を発見しました。f x =バツx1 、今Niuniuはあなたに数n \mathitnを与えますn、彼は知りたい∑ i = 1 nf(i)\ sum_ {i = 1} ^ nf(i)i = 1n個f i )の値は何ですか、彼に教えてください。
入力サンプル

4

サンプル出力

12

1≤n≤1091≤n≤10^ 9 1n1 09
ここに写真の説明を挿入

class Solution {
    
    
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 
     * @param n int整型 
     * @return long长整型
     */
    long long Sum(int n) {
    
    
        // write code here
        long long ans = 0;
        for(int i = 1; i <= n; i++)
            ans = ans + (i^(i-1));
        return ans;
    }
};

結論:f(x)= 2×f(x / 2)+ 1 f(x)= 2 \ times f(x / 2)+ 1f x =2××f x / 2 +1

class Solution {
    
    
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 
     * @param n int整型 
     * @return long长整型
     */
    long long Sum(int n) {
    
    
        // write code here
        if(n == 1) return 1;
        else return n + 2*Sum(n/2);
    }
};
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
# 
# @param n int整型 
# @return long长整型
#
class Solution:
    def Sum(self , n ):
        # write code here
        if n == 1:
            return 1
        return n + 2*self.Sum(n//2)

総括する

ここに写真の説明を挿入
ここに写真の説明を挿入

ジュニアのクラススケジュールを読み、jbjbテストを受けますj b研究、学校に行く、英語を学ぶ、勉強する本を持っている、銀に行く、それはまだ良すぎる。暴力は奇跡を起こします、cの後、私はbだと思います。多分暴力もそうかもしれません、O(n 2)O(n ^ 2)O n2学部課程の準備は、新入生の年から慎重に準備する必要があるようで、3年生の結果が出ます。基本的には保証されており、最も簡単なことでもあります。二重の非保証は、大学で本当に最も簡単なことです。 。

おすすめ

転載: blog.csdn.net/Edviv/article/details/111404398