pokemon

第一題:


image.png

不怕題目難,就怕題目有歧義,一開始我將“當(dāng)某一天你抓到的寶可夢數(shù)量達(dá)到 N時(shí)”理解為sn=N,但題目意思其實(shí)是an=N,死都AC不了讓我很尷尬。后來才悟到他的意思。
標(biāo)準(zhǔn)代碼如下:

#include<iostream>
using namespace std;
int main(void)
{
    long long N;
    long long n;
    long long pokemmo;
    while (cin >> N)
    {
        n = pokemmo = 1;
        while (n < N)
        {       
            n++;
            pokemmo = 1*n+((n*(n-1))/2)*1;
        }
        pokemmo = 2 * pokemmo - n;
        cout << pokemmo << endl;
    }
}

不難發(fā)現(xiàn),這個(gè)等差數(shù)列求和公式可以化簡,將1n+((n(n-1))/2)*1乘以2-n,結(jié)果為n^2
因此代碼可寫成:

#include<iostream>
using namespace std;
int main(void)
{
    long long N;
    while (cin >> N)
    {
        cout << N*N << endl;
    }
}

第二題(不能AC,原因未知):
思路:
1.先寫一個(gè)函數(shù)用于判斷兩個(gè)數(shù)是否互質(zhì),
2.如果兩個(gè)數(shù)不互質(zhì),則讓較大的數(shù)為0,不參與之后的判斷,比如12,6,4
12的因數(shù):6,4,3,2
6的因數(shù):3,2
4的因數(shù):2
可知,在兩個(gè)數(shù)不互質(zhì)的情況下,較大的數(shù)具有更多的因數(shù),不互質(zhì)的可能性更大。為了確保結(jié)果有更多的質(zhì)數(shù),在兩個(gè)數(shù)互質(zhì)的情況下要去掉較大的那一個(gè)。
3.數(shù)到最后還剩幾個(gè)不為0的數(shù)。
代碼如下:

#include<iostream>
using namespace std;

long long gcd(long a, long b) {
    return b ? gcd(b, a % b) : a;
}

void niubi(int n, long long a[20])
{
    long long i, j;
    for (i = 0; i <n; i++)
    {
        for (j = 0; j < n; j++)
        {       
            if(a[i] != 0 && a[j] != 0&&a[j]!=a[i])
                if (gcd(a[i],a[j])!=1)//判斷兩個(gè)數(shù)是否互質(zhì)
                {
                    if (a[i] >= a[j]) a[i] = 0;
                    else a[j] = 0;          
                }   
        }
    }
}

int main()
{
    int T;
    int n;
    int i, j;
    int sum ;
    long long a[20];
    while (cin >> T)
    {
        while(T--)
        {
            cin >> n;
            sum = 0;
            for (j = 0; j < n; j++)
                cin >> a[j];

            niubi(n, a);

            /*for (j = 0; j < n; j++)
                cout <<"a[j]="<< a[j]<<endl;*/
            for (j = 0; j < n; j++)
                if (a[j] != 0) sum++;
            cout << sum << endl;
        }
    }
    return 0;
}

第三題:
我在競賽書曾經(jīng)看過一道題,與這道題大同小異,所以非常好做。那道題是判斷a是否能刪除0到多個(gè)字符獲得b,這個(gè)是定死在兩個(gè)字符。
思路:由于b一定是a刪除兩個(gè)得到,則他們的長度必定相差2,如果相差2,則繼續(xù)判斷a能否得到b
代碼如下:

#include<iostream>
#include<string.h>
using namespace std;
char a[1000005], b[1000005];
int main() {

    int T;
    while(cin >> T)
    {
        while (T--)
        {
            cin >> b >> a;
            int star = 0, lenb = strlen(b), lena = strlen(a);
            if (lenb - lena != 2)
            {
                cout << 0 << endl;
            }
            else
            {
                for (int i = 0; i < lenb; i++)
                {
                    if (a[star] == b[i])
                        star++;
                    if (star == lena) //代表可以在長字串中找到短串
                    {
                        cout << 1 << endl;
                        break;
                    }
                }
                if (star != lena)
                    cout << 0 << endl;
            }       
        }
    }
    return 0;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容