PAT | 算法笔记 | 简单模拟

B1001

#include <stdio.h>

//害死人不偿命的(3n+1)猜想

int main(){

    int n;
    scanf("%d",&n);

    int count=0;
    while(n!=1){
        if(n%2==0){
            n/=2;
        }else{
            n=(3*n+1)/2;
        }
        count++;
    }
    printf("%d",count);
    return 0;
}


B1008

//
// Created by 22385 on 2022/1/17.
//
//B1008 数组循环右移
//算法思想:转置

#include<stdio.h>

void reverse(int a[],int low,int high);

int main(){
    int n,p;
    scanf("%d %d",&n,&p);
    p=p%n;
//注意移动的序列的合法性
    int a[n]={0};
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    reverse(a,0,n-1);
    reverse(a,0,p-1);
    reverse(a,p,n-1);
    for(int i=0;i<n;i++){
        if(i!=0){
            printf(" ");
        }
        printf("%d",a[i]);
    }
    return 0;
}

void reverse(int a[],int low,int high){
    int mid= (high-low+1)/2;
    int temp;
    for(int i=0;i<mid;i++){
        temp=a[low+i];
        a[low+i]=a[high-i];
        a[high-i]=temp;
    }
}

B1010

//
// Created by 22385 on 2022/1/17.
//
#include<stdio.h>
//只有“零多项式”才输出“0 0 ”
int main(){
    int a,n;
    char flag =' ';
    bool tag= false;
    while(flag!='\n'){
        scanf("%d %d",&a,&n);
        flag=getchar();
        if(n==0 && !tag && flag == '\n'){
            printf("0 0");
        }else if(n!=0){
            if(tag){
                printf(" ");
            }
            tag= true;
            printf("%d %d",a*n,n-1);
           //iclon会自动帮你删去最后一个空格....
        }
    }
    return 0;
}


B1011

//
// Created by 22385 on 2022/1/14.
//

#include<stdio.h>
#include <valarray>

int main(){
    long long a,b,c;
    int n;
    scanf("%d",&n);
    int result[n];
    for(int i=1;i<=n;i++){
        scanf("%lld %lld %lld",&a,&b,&c);
        //读入longlong型数据要用:%lld
        result[i]=a+b>c?1:0;
    }
    for(int i=1;i<=n;i++){
        if(result[i]==1){
            printf("Case #%d: true\n",i);
        }else{
            printf("Case #%d: false\n",i);
        }
    }

    return 0;
}


B1012

//
// Created by 22385 on 2022/1/17.
//

#include<stdio.h>

int main(){
    int n;
    scanf("%d",&n);
    int array[n]={0};
    int A[5]={0};
    int flag[5]={0};
    int count=0;
    for(int i=0;i<n;i++){
        scanf("%d",&array[i]);
        if(array[i]%5==0 && array[i]%2==0) {
            if(flag[0]==0)
                flag[0]=1;
            A[0]+=array[i];
        }
        if(array[i]%5==1){
            if(flag[1]==0)
                flag[1]=1;
            A[1]+=array[i]*flag[1];
            flag[1]*=-1;
        //交错序列和可能为0,但是不能输出N
        }
        if(array[i]%5==2){
            if(flag[2]==0)
                flag[2]=1;
            A[2]++;
        }
        if(array[i]%5==3){
            if(flag[3]==0)
                flag[3]=1;
            A[3]+=array[i];
            count++;
        }
        if(array[i]%5==4){
            if(flag[4]==0)
                flag[4]=1;
            if(array[i]>A[4]){
                A[4]=array[i];
            }
        }
    }
    for(int i=0;i<5;i++){
        if(i!=0){
            printf(" ");
        }
        if(i==3){
            if(flag[i]==0){
                printf("N");
            }else{
                printf("%.1f",A[i]*1.0/count);
            }
        }else{
            if(flag[i]==0){
                printf("N");
            }else{
                printf("%d",A[i]);
            }
        }
    }
    return 0;
}


B1016

//
// Created by 22385 on 2022/1/17.
//

// B1016 部分A+B

#include<stdio.h>

int main(){
    int A,B,DA,DB;
    int PA=0,PB=0;
    scanf("%d %d %d %d",&A,&DA,&B,&DB);
    while(A!=0){
        if(A%10==DA){
            PA=PA*10+DA;
        }
        A/=10;
    }
    while(B!=0){
        if(B%10==DB){
            PB=PB*10+DB;
        }
        B/=10;
    }
    printf("%d",PA+PB);
    return 0;
}

B1018

//
// Created by 22385 on 2022/1/17.
//
#include<stdio.h>
char max(int a[]);
int main(){
    int n;
    scanf("%d",&n);
    int a[3]={0},am[3]={0};
    int b[3]={0},bm[3]={0};
    char p1,p2;
    int p11,p22;
    for(int i=0;i<n;i++){
        getchar();
        scanf("%c %c",&p1,&p2);
        switch (p1) {
            case 'C':
                p11=1;
                break;
            case 'J':
                p11=2;
                break;
            case 'B':
                p11=0;
                break;
        }
        switch (p2) {
            case 'C':
                p22=1;
                break;
            case 'J':
                p22=2;
                break;
            case 'B':
                p22=0;
                break;
        }
        if(p11==p22){
            a[1]++;
            b[1]++;
        }else if((p11+p22)%2==0){
            if(p11>p22){
                a[0]++;
                am[p11]++;
                b[2]++;
            }else{
                b[0]++;
                bm[p22]++;
                a[2]++;
            }
        }else{
            if(p11<p22){
                a[0]++;
                am[p11]++;
                b[2]++;
            }else{
                b[0]++;
                bm[p22]++;
                a[2]++;
            }
        }
    }
    printf("%d %d %d\n",a[0],a[1],a[2]);
    printf("%d %d %d\n",b[0],b[1],b[2]);
    printf("%c %c",max(am),max(bm));
    return 0;
}

char max(int a[]){
    int max;
    if(a[2]>a[0]){
        if(a[2]>a[1]){
            max=2;
        }else{
            max=1;
        }
    }else{
        if(a[1]>a[0]){
            max=1;
        }else{
            max=0;
        }
    }
    switch(max){
        case 1:
            return 'C';
        case 2:
            return 'J';
        case 0:
            return 'B';
    }
}

B1026

//
// Created by 22385 on 2022/1/17.
//
//B1026 程序运行时间
#include<stdio.h>
#define CLK_TCK 100;
int main()
{
    int C1,C2;
    scanf("%d %d",&C1,&C2);
    int t=(C2-C1)/CLK_TCK;
    int h=0,m=0,s=0;
    h=t/3600;
    m=(t%3600)/60;
    if((C2-C1)%100>=50){
        s=t%60+1;
    }else{
        s=t%60;
    }
    printf("%02d:%02d:%02d",h,m,s);
    return 0;
}

B1032

// Created by 十五 on 2022/1/14.
#include<stdio.h>
int main(){
    int n;
    scanf("%d",&n);
    /*1:
        int a[n]={0};
    */
    int a[1000000]={0};
    int score;
    int id;
    int winner=0;
    for(int i=0;i<n;i++){
        scanf("%d %d",&id,&score);
        a[id]+=score;
        if(a[id]>=a[winner]){
            winner=id;
        }
    }

    printf("%d %d",winner,a[winner]);
    return 0;
}
/*
    试例2未通过:
        可能只有一个学校,且成绩为0,但是需要输出该学校的编号
 */

B1046

//
// Created by 22385 on 2022/1/17.
//

#include <stdio.h>

int main(){

    int n;
    scanf("%d",&n);

    int AShout,AShow;
    int BShout,BShow;
    int drinkA=0,drinkB=0;
    for(int i=0;i<n;i++){
        scanf("%d %d %d %d",&AShout,&AShow,&BShout,&BShow);
        if(AShow == BShow){
            continue;
        }else{
            if(AShow==(AShout+BShout)){
                drinkB++;
            }else if(BShow==(AShout+BShout)){
                drinkA++;
            }
        }
    }
    printf("%d %d",drinkA,drinkB);
    return 0;
}


A1002

//
// Created by 22385 on 2022/1/18.
//
#include<stdio.h>

const int max_n=1111;
double p[max_n]={0};//将多项式按幂次存入数组

int main(){
    int k,n,count=0;
    double a;
    //第一个多项式
    scanf("%d",&k);
    for(int i=0;i<k;i++){
        scanf("%d %lf",&n,&a);
        p[n]=a;
    }
    //第二个多项式
    scanf("%d",&k);
    for(int i=0;i<k;i++){
        scanf("%d %lf",&n,&a);
        p[n]+=a;
    }
    //统计非零项个数
    for(int i=0;i<max_n;i++){
        if(p[i]!=0) count++;
    }
    printf("%d",count);
    //按格式输出多项式的和
    for(int i=max_n-1;i>=0;i--){
        if(p[i]!=0){
            printf(" %d %.1lf",i,p[i]);
        }
    }
}


A1009

//
// Created by 22385 on 2022/1/18.
//
//多项式乘法
#include<stdio.h>
#define max_n 2002 //乘法,数组要开到两倍大

int main(){
    int ka,kb,n;
    double a;
    double p[max_n]={0};    //数组定义在外面发生了段错误?????
    double pa[max_n]={0};
    scanf("%d",&ka);
    for(int i=0;i<ka;i++){
        scanf("%d %lf",&n,&a);
        pa[n]=a;
    }
    scanf("%d",&kb);
    for(int i=0;i<kb;i++){
        scanf("%d %lf",&n,&a);
        for(int j=0;j<max_n;j++){//循环条件输错了
            p[n+j]+=pa[j]*a;
        }
    }
    int count=0;
    for(int i=0;i<max_n;i++){
        if(p[i]!=0) count++;
    }
    printf("%d",count);
    for(int i=max_n-1;i>=0;i--){
        if(p[i]!=0){
            printf(" %d %.1lf",i,p[i]);
        }
    }
    return 0;
}

A1042

//
// Created by 22385 on 2022/1/18.
//
//多项式乘法
#include<stdio.h>
#define max_n 2002 //乘法,数组要开到两倍大

int main(){
    int ka,kb,n;
    double a;
    double p[max_n]={0};    //数组定义在外面发生了段错误?????
    double pa[max_n]={0};
    scanf("%d",&ka);
    for(int i=0;i<ka;i++){
        scanf("%d %lf",&n,&a);
        pa[n]=a;
    }
    scanf("%d",&kb);
    for(int i=0;i<kb;i++){
        scanf("%d %lf",&n,&a);
        for(int j=0;j<max_n;j++){//循环条件输错了
            p[n+j]+=pa[j]*a;
        }
    }
    int count=0;
    for(int i=0;i<max_n;i++){
        if(p[i]!=0) count++;
    }
    printf("%d",count);
    for(int i=max_n-1;i>=0;i--){
        if(p[i]!=0){
            printf(" %d %.1lf",i,p[i]);
        }
    }
    return 0;
}

A1046

//
// Created by 22385 on 2022/1/17.
//
#include<stdio.h>
int main(){
    int n;
    scanf("%d",&n);
    int num[n+1]={0};
    int d;
    for(int i=1;i<=n;i++){
        //运行超时:不存储点的距离,直接存储路线距离
        scanf("%d",&d);
        num[i]=num[i-1]+d;//num[i]:点1到点i+1的顺序路径长度
    }
    int test;
    scanf("%d",&test);
    int st,end;
    int sd;
    for(int i=0;i<test;i++){
        scanf("%d %d",&st,&end);
        if(st>end){
            int temp=end;
            end=st;
            st=temp;
        }
        if((num[end-1]-num[st-1])*2>num[n]){
            sd=num[n]-(num[end-1]-num[st-1]);
        }else{
            sd=num[end-1]-num[st-1];
        }
        printf("%d\n",sd);
    }

    return 0;
}



A1065

//
// Created by 22385 on 2022/1/17.
//
#include<stdio.h>
int main(){
    int n;
    scanf("%d",&n);
    long long a,b,c;
    for(int i=0;i<n;i++){
        scanf("%lld %lld %lld",&a,&b,&c);
        long long sum =a+b;
        if(a>0 && b>0 && sum<0){
        //为什么必须将a+b存在sum中而不能直接比较
            printf("Case #%d: true\n",i+1);
        }else if(a<0 && b<0 && sum>=0){
            printf("Case #%d: false\n",i+1);
        }else{
            if(a+b>c){
                printf("Case #%d: true\n",i+1);
            }else{
                printf("Case #%d: false\n",i+1);
            }
        }
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值