天天看點

簡單模拟答案害死人不償命的(3n+1)猜想(卡拉茲幻想)挖掘機技術哪家強A+B和CA+B and C(64Bit)部分A+B劃拳數組元素循環右移問題數字分類錘子剪子布Shuffling MachineShortest Distance一進制多項式求導A+B for PolynomialsProduct of Polynomials

害死人不償命的(3n+1)猜想(卡拉茲幻想)

#include<cstdio>
int divide(int n){
    //while循環不能定義在divide
    if(n % 2 == 0){
        return  n / 2;
    }else{
        return  ((3 * n) + 1)/2;
    }
}
int main(){
    int a,i;
    i = 0;
    scanf("%d",&a);
    while(a != 1){
        a = divide(a);
        i++;
    }
    printf("%d\n",i);
    return 0;
}           

複制

挖掘機技術哪家強

#include<cstdio>
int N = 0;
//這裡的N會不會在main函數裡面再建立一個副本,如果其他函數要用是否需要傳出來?
int num;
int scr;
int sum[10];
int MAX_num = -1;
int MAX_sum = -1;
void plus(int N){
    for(int i = 0; i < N; i++){
        scanf("%d %d",&num,&scr);
        sum[num] += scr;
    }
    for(int i = 0;i < N; i++){
        if(sum[i]>MAX_sum){
            MAX_sum = sum[i];
            MAX_num = i;
        }
    }
    printf("%d %d",MAX_num,MAX_sum);
}
int main(){
    scanf("%d",&N);
    plus(N);
    return 0;
}           

複制

A+B和C

#include<cstdio>
typedef long long LL;
LL a = 0,b = 0,c = 0;
int T;
void func(){
    scanf("%d",&T);
    while(T>0&&T<=10){
        for(int i = 0; i < T; i++){
            scanf("%d%d%d",&a,&b,&c);
            if(a+b>c) printf("Case #%d:true",T);
            else printf("Case #%d:false",T);
        }
    }
}
int main(){
    func();
    return 0;
}           

複制

A+B and C(64Bit)

#include<cstdio>
typedef long long int LL;
void func(){
    int T,tcase=1;
    scanf("%d",&T);
    while(T--){
        LL a ,b ,c;
        scanf("%lld%lld%lld",&a,&b,&c);
        //注意資料類型對應,這裡的%lld對應long long int,而不應該是%d
        LL sum = a+b;
        //這裡要設定一個sum來記錄a+b的值,直接放在if會産生錯誤(為何?)
        bool flag=0;
        if(a<0&&b<0&&sum>=0) flag = false;
        else if(a>0&&b>0&&sum<=0) flag = true;
        else if(sum>c) flag=1;
        else flag =0;
        if(flag == 1){
            printf("Case #%d: true\n",tcase++);
        }else{
            printf("Case #%d: false\n",tcase++);
        } 
    }
}
int main(){
    func();
    return 0;
}            

複制

部分A+B

#include<cstdio>
// 擷取正整數n的(x)部分
int cal(int n, int x)
{
    int digit;
    int ret = 0;
    while (n > 0){
        digit = n % 10;
        if (digit == x){
            ret = ret*10 + digit;
        }
        n /= 10;
    }
    return ret;
}
int main(){
    int a,pa,b,pb;
    scanf("%d%d%d%d",&a,&pa,&b,&pb);
    printf("%d\n",cal(a,pa)+cal(b,pb));
    return 0;
}           

複制

#include <stdio.h>
void func(){
    int C1=0,C2=0;
    scanf("%d%d",&a,&b);
    //注意加上& 
    int sub = ((C2 - C1) + 50) / 100;
    //先給(b-a)加上50,這樣如果(b-a)/100的小數位大于等于0.5則會進位,小于等于0.5則會舍去
    int hh = sub / 3600;
    sub = sub % 3600;//此時将n % 3600即為剩下的分鐘和秒數
    int mm = sub / 60, ss = sub % 60;
    printf("%02d:%02d:%02d", hh, mm, ss);
    //用printf的%02d格式自動為不足2位的整數在前面補上0
}
int main() {
    func();
    return 0;
}           

複制

劃拳

#include<cstdio>
void func(){
    int lose_account_jia = 0, lose_account_yi = 0;
    int head_jia = 0, head_yi = 0;
    int speak_jia = 0, speak_yi = 0;
    int n;
    scanf("%d",&n);
    while(n--){
        scanf("%d%d%d%d", &speak_jia, &head_jia, &speak_yi, &head_yi);
        if(head_jia == speak_jia+speak_yi&&head_yi!= speak_jia+speak_yi){
            lose_account_yi++;
        }else if(head_jia != speak_jia+speak_yi&&head_yi== speak_jia+speak_yi){
            lose_account_jia++;
        }
    }
    printf("%d %d\n",lose_account_jia,lose_account_yi);
}
int main(){
    func();
    return 0;
}            

複制

數組元素循環右移問題

#include <stdio.h>
#define MAXN 100

int main() {
    int n, m, num[MAXN * 2], i, temp;
    scanf("%d %d", &n, &m);
    for (i = 0; i < n; i++) {
        scanf("%d", &num[i]);
    }
    m %= n;
    for (i = n + m - 1; i > m - 1; i--) {
        num[i] = num[i - m];
    }
    for (i = 0; i <= m - 1; i++) {
        num[i] = num[n + i];
    }
    for (i = 0; i < n; i++) {
        if (i == 0) {
            printf("%d", num[i]);
        }
        else {
            printf(" %d", num[i]);
        }
    }
    printf("\n");
    return 0;
}           

複制

本題還可以使用STL解決,即使用reverse()函數

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
    int n,m;
    cin >> n >> m;
    if(m > n)
        m -=n;
    vector<int> arr(n);
    for(int i=0; i<n; i++){
        int temp;
        cin >> temp;
        arr[i] = temp;
    }
    reverse(arr.begin(),arr.end());
    reverse(arr.begin(),arr.begin()+m);//從數組開頭查m個元素轉換順序
    reverse(arr.begin()+m,arr.end());//從數組第m+1個元素到數組末尾轉換順序,arr.end()可以寫成arr.begin()+n
    for(int j=0; j<n; j++){
        if(j != 0)
            cout << " ";
        cout << arr[j];
    }
    return 0;
}           

複制

數字分類

#include <stdio.h>
int main()
{
    int num;
    int A1 = 0, A2 = 0, A3 = 0, A4 = 0, A5 = 0;
    int A2flag = 0, A4count = 0;
    scanf("%d", &num);
    for(int i = 0, n; i < num; i++)
    {
        scanf("%d", &n);
        switch(n % 5)
        {
            case 0: A1 += n % 2 ? 0 : n;                                break;
            case 1: A2flag = A2flag == 1 ? -1 : 1; A2 += A2flag * n;    break;
            case 2: A3 ++;                                              break;
            case 3: A4 += n; A4count ++;                                break;
            case 4: A5 = n > A5? n : A5;                                break;
        }
    }

    if(A1 == 0)     printf("N ");   else printf("%d ", A1);
    if(A2flag == 0) printf("N ");   else printf("%d ", A2);
    if(A3 == 0)     printf("N ");   else printf("%d ", A3);
    if(A4 == 0)     printf("N ");   else printf("%.1f ", A4 * 1.0 / A4count);
    if(A5 == 0)     printf("N");    else printf("%d", A5);

    return 0;
}           

複制

這題也可以用STL解決部分問題。

#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cstring>

using namespace std;
#define MAX_STR_LENS  4000

int main()
{
    int N = 0,i = 0, data = 0;
    int A1 = 0, A2 = 0, A3 = 0, A4outs = 0,  A5 = 0;
    double A4 = 0;
    vector<int> vecA2; //屬于A2的所有資料

    cin >> N;
    for(i = 0; i < N; i++)
    {
        cin >> data;

        /* 判斷是否是屬于A1 */
        if (data % 5 == 0 && data % 2 == 0) A1 += data;

        /* 判斷是否是屬于A2 */
        if (data % 5 == 1) vecA2.push_back(data);

        /* 判斷是否是屬于A3 */
        if (data % 5 == 2) A3++;

        /* 判斷是否是屬于A4 */
        if (data % 5 == 3){
            A4 += data;
            A4outs++;
        }

        /* 判斷是否是屬于A5 */
        if (data % 5 == 4) A5 = max(A5,data);

    }

    /*輸出 */
    if (A1 == 0) cout << "N";
    else cout << A1;
    if(vecA2.empty()) cout << " N";
    else
    {
        for(i = 0; i < vecA2.size(); i++)
        {
            A2 = A2 + pow(-1,i) * vecA2[i];
            //pow():計算-1的i次方
        }
        cout << " " << A2;
    }

    if (A3 == 0) cout << " N";
    else cout << " " << A3;

    if (A4outs == 0) cout << " N";
    else printf(" %.1f",A4/A4outs);

    if (A5 == 0) cout << " N" << endl;
    else cout << " " << A5 << endl;
    return 0;
}           

複制

錘子剪子布

C++的寫法

#include <iostream>
using namespace std; 
int main() {
    int n;
    cin >> n;
    int jia_win = 0, yi_win = 0;
    int jia[3] = {0}, yi[3] = {0};
    for (int i = 1; i <= n; i++) {
        char j,y;
        cin >> j >> y; 
        if (j == 'C' && y == 'J') {
            jia_win++;
            jia[0]++;
        } else if (j == 'J' && y == 'C') {
            yi_win++;
            yi[0]++;
        } else if (j == 'J' && y == 'B') {
            jia_win++;
            jia[1]++;
        } else if (j == 'B' && y == 'J') {
            yi_win++;
            yi[1]++;
        } else if (j == 'B' && y == 'C') {
            jia_win++;
            jia[2]++;
        } else if (j == 'C' && y == 'B') {
            yi_win++;
            yi[2]++;
        }
    }
    cout << jia_win << " " << n - jia_win - yi_win << " " << yi_win << endl << yi_win << " " << n - jia_win - yi_win << " " << jia_win << endl;
    int max_jia = -1;
    for(int i = 0; i < 3; i++){
        if(jia[i] > max_jia){
            max_jia = i;
        }

    }
    if(max_jia == 0) cout<<"C";
    else if(max_jia == 1) cout<<"J";
    else if(max_jia == 2) cout<<"B";
    int max_yi = -1;
    for(int i = 0; i < 3; i++){
        if(yi[i] > max_yi){
            max_yi = i;
        }
    }
    if(max_jia == 0) cout<<" "<<"C";
    else if(max_jia == 1) cout<<" "<<"J";
    else if(max_jia == 2) cout<<" "<<"B";
    return 0;
}           

複制

C語言的寫法(不知字元那裡該怎麼改,總是才輸入5行左右就異常,下次再看)(挖坑,待解決)

#include <stdio.h>
int main() {
    int n;
    scanf("%d",&n);
    int jia_win = 0, yi_win = 0;
    int jia[3] = {0}, yi[3] = {0};
    for (int i = 0; i < n; i++) {
        char j, y;
        scanf("%c%c",&j,&y);
        if (j == 'C' && y == 'J') {
            jia_win++;
            jia[1]++;
        } else if (j == 'J' && y == 'C') {
            yi_win++;
            yi[1]++;
        } else if (j == 'J' && y == 'B') {
            jia_win++;
            jia[2]++;
        } else if (j == 'B' && y == 'J') {
            yi_win++;
            yi[2]++;
        } else if (j == 'B' && y == 'C') {
            jia_win++;
            jia[0]++;
        } else if (j == 'C' && y == 'B') {
            yi_win++;
            yi[0]++;
        }
    }
    printf("%d %d %d\n%d %d %d",jia_win, n - jia_win - yi_win, yi_win, yi_win, n - jia_win - yi_win, jia_win);
    /*
    int max_jia = -1;
    for(int i = 0; i < 3; i++){
        if(jia[i] > max_jia){
            max_jia = i;
        }

    }
    if(max_jia == 0) cout<<"C";
    else if(max_jia == 1) cout<<"J";
    else if(max_jia == 2) cout<<"B";
    int max_yi = -1;
    for(int i = 0; i < 3; i++){
        if(yi[i] > max_yi){
            max_yi = i;
        }
    }
    if(max_jia == 0) cout<<" "<<"C";
    else if(max_jia == 1) cout<<" "<<"J";
    else if(max_jia == 2) cout<<" "<<"B";
    return 0;
    */
    return 0;
}           

複制

Shuffling Machine

#include<cstdio>
const int N = 54;
char mp[5]={'S','H','C','D','J'};
int start[N+1], end[N+1], next[N+1];
int main(){
    int K;
    scanf("%d",&K);
    for(int i = 1; i <= N; i++){
        start[i] = i;
    }
    for(int i = 1; i <= N; i++){
        scanf("%d",&next[i]);
    }
    for(int step = 0; step < k; step++){
        for(int i = 1; i <= N; i++){
            end[next[i]]=start[i]; 
        }
        for(int i = 1; i <= N; i++){
            start[i]=end[i];
        }
    }
    for(int i = 1; i <= N; i++){
        if(i != 1) printf(" ");
        printf("%c%d", mp[start[i]]/13, start[i]%13+1);
    }
}           

複制

Shortest Distance

簡單模拟答案害死人不償命的(3n+1)猜想(卡拉茲幻想)挖掘機技術哪家強A+B和CA+B and C(64Bit)部分A+B劃拳數組元素循環右移問題數字分類錘子剪子布Shuffling MachineShortest Distance一進制多項式求導A+B for PolynomialsProduct of Polynomials
簡單模拟答案害死人不償命的(3n+1)猜想(卡拉茲幻想)挖掘機技術哪家強A+B和CA+B and C(64Bit)部分A+B劃拳數組元素循環右移問題數字分類錘子剪子布Shuffling MachineShortest Distance一進制多項式求導A+B for PolynomialsProduct of Polynomials

一進制多項式求導

自己寫的代碼:

#include<cstdio>
int main(){
    int k,e,count=0,account=0;
    while(scanf("%d%d",&k,&e)!=EOF){
        account++;
        if(e>=1){
            k*=e;
            e--;
            count++;
        }else if(e=0){
            k=0;
            e--;
            count++;
            //注意:這裡對函數的求導也不要寫在while...EOF裡面,因為題目給的輸入樣例是一行直接輸入完畢的,沒辦法判斷結束的标志(輸入樣例沒給n)
            //注意:正是因為題目給的輸入樣例是一行直接輸入完畢的,是以最好開一個數組來存儲系數,其下标為指數,同時注意指數和數組下标的對應關系。
        }
        if(account=1){printf("%d %d",k,e);}
        else if(account>1){printf(" %d %d",k,e);}
    }
    if(count=0){printf("0 0");}
    return 0;
}           

複制

這是算法書給的代碼:

#include<cstdio>
int main(){
    int a[1010]={0};
    int k,e,count=0;
    while(scanf("%d,%d",&k,&e)!=EOF){
        a[e]=k;
    }
    a[0]=0;
    for(int i=1;i<=1000;i++){
        a[i-1]=a[i]*i;
        a[i]=0;//這一步歸零,因為原來a[i]已經*i并指派給a[i-1]了
        if(a[i-1]!=0) count++;
    }
    if(count==0) printf("0 0");
    else{
        for(int i=1000;i>=0;i--){
            if(a[i]!=0){
                printf("%d %d",a[i],i);
                count--;
                if(count!=0) printf(" ");
            }
        }
    }
    return 0;
}           

複制

A+B for Polynomials

#include<cstdio>
int main(){
    float c[1001] = {0};
    int m, n, t;
    float num;
    scanf("%d", &m);
    for (int i = 0; i < m; i++) {
        scanf("%d%f", &t, &num);//對于double類型,scanf是%f,printf是&lf
        c[t] += num;
    }
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d%f", &t, &num);
        c[t] += num;
    }
    int cnt = 0;
    for (int i = 0; i < 1001; i++) {
        if (c[i] != 0) cnt++;
    }
    printf("%d", cnt);
    for (int i = 1000; i >= 0; i--) {
        if (c[i] != 0.0)
            printf(" %d %.1f", i, c[i]);
    }
    return 0;
}           

複制

Product of Polynomials

(挖坑,待解決)

#include<cstdio>
int main(){
    int n1, n2, a, cnt = 0;
    scanf("%d", &n1);
    double b, arr[1001] = {0.0}, ans[2001] = {0.0};//arr儲存第一行資料,ans儲存結果
    for(int i = 0; i < n1; i++) {
        scanf("%d %lf", &a, &b);
        arr[a] = b;
    }
    scanf("%d", &n2);
    for(int i = 0; i < n2; i++) {
        scanf("%d %lf", &a, &b);
        for(int j = 0; j < 1001; j++)
                ans[j + a] += arr[j] * b;
    }
    for(int i = 2000; i >= 0; i--)
        if(ans[i] != 0.0) cnt++;
    printf("%d", cnt);
    for(int i = 2000; i >= 0; i--)
        if(ans[i] != 0.0)
            printf(" %d %.1f", i, ans[i]);
    return 0;
}           

複制

版權所有:可定部落格 © WNAG.COM.CN

本文标題:《簡單模拟答案》

本文連結:https://wnag.com.cn/934.html

特别聲明:除特别标注,本站文章均為原創,本站文章原則上禁止轉載,如确實要轉載,請電聯:[email protected],尊重他人勞動成果,謝過~