1. 程式人生 > 實用技巧 >UPC題解訓練4A-F

UPC題解訓練4A-F

題解

F

假設每一個點為ai,每個人的蛋糕為x
把每個點ai放在數軸上,不難發現,|ai-x|為x到ai的距離。任取兩個值ai,aj,發現x只要是
ai到aj上的任意一個點即可。
答案就是若干對aj-ai求和。

int a[N];
int main() {
    int n;
    cin>>n;
    for(int i = 0;i < n;i++)
        cin>>a[i];
    sort(a,a+n);
    int sum = 0;
    for(int i = 0,j = n-1;i < j;i++,j--){
        sum += a[j]-a[i];
    }
    cout<<sum<<endl;
    return 0;
}

E

純粹的模擬就行了,記得四捨五入。

priority_queue<int> Q;
int main() {
    int n,m;
    cin>>m>>n;
    int tall[15][15];
    int sum[15] = {0},tmax[15] = {0};
    for(int i = 1;i <= m;i++){
        for(int j = 1;j <= n;j++){
            cin>>tall[i][j];
            sum[i]+=tall[i][j];
            tmax[i] = max(tall[i][j],tmax[i]);
            if(tall[i][j] > 165) Q.push(tall[i][j]);
        }
    }
    for(int i = 1;i <= m;i++)
        cout<<tmax[i]<<endl;
    for(int i = 1;i <= m;i++) {
        cout <<(int) (sum[i] * 1.0 / n +0.5)<< endl;
    }
    while(!Q.empty()){
        cout<<Q.top()<<' ';
        Q.pop();
    }
    return 0;
}

D

列舉就行了

bool is_prime(int x){
    for(int i = 2;i < x;i++){
        if(x%i == 0) return false;
    }
    return true;
}
bool is_sq(int x){
    return x == (int)sqrt(x) * (int)sqrt(x);
}
int main() {
    int a,b;
    cin>>a>>b;
    int cnt = 0;
    bool flag = false;
    for(int i = a; i <= b;i++){
        if(is_prime(i/100) && is_sq(i%100) && i%6 == 0){
            if(flag)cout<<' ';
            flag = true;
            cout<<i;
            cnt++;
        }
    }
    cout<<endl<<cnt<<endl;
    return 0;
}

C

直接上程式碼把.

int main()
    {
        char str[30];
        int i,count = 0;
        gets(str);
        if(strlen(str) >= 8&&strlen(str) <= 30)
        {
            for(i=0;i<strlen(str);i++)
            {
                if((str[i]>='0'&&str[i]<='9'))
                {
                    count++;
                    continue;
                }
                else
                    cout<<str[i];
            }
        }   
        cout<<"\n"<<count;
    }

B

把後面兩個字母,交換到前面

int main() {
    char a[N];
    cin>>a;
    int len = strlen(a);
    int t = len;
    cout<<a<<endl;
    while(t>1){
        t--;
        for(int i = len-1;i >= 2;i--){
            //cout<<a[i-3]<<a[i-2]<<a[i-1]<<a[i]<<endl;
            swap(a[i-1],a[i-2]);
            swap(a[i],a[i-1]);
        }
        cout<<a<<endl;
    }
    return 0;
}

A

int main()
{
    double x,y;
    cin>>x;
    if(x >= 1 && x <= 15)
        y = x*6;
    else if(x > 15&&x <= 100)
        y = 6*15+(x-15)*9;
    cout<<round(y)<<endl;
}