PAT乙级解集

-1001 害死人不偿命的(3n+1)猜想(15)

#include<stdio.h>

int main()
{
  int n;
  int step=0;

  scanf("%d",&n);

  while(n!=1)
  {
    if(n%2==1)
      n=(3*n+1)/2;
    else
      n/=2;

    step+=1;
  }
  printf("%d",step);
}

-1002 写出这个数(20)

#include<stdio.h>
#include<string.h>

int main()
{
    char s[100];

    scanf("%s",s);
    int i=0;
    int sum = 0;
    int new_sum[5];

    while(s[i]!=NULL)
    {
        sum+=(int)s[i]-48;
        i+=1;
    }
    if(sum==0)
    {
        printf("ling");
        return 0;
    }
    i=0;
    while(sum>=1)
    {
        new_sum[i]=sum%10;
        //printf("%d\n",new_sum[i]);
        sum/=10;
        i+=1;
    }
    i--;
    while(i>=0)
    {
        //printf("%d\n",new_sum[i]);
        switch(new_sum[i])
        {
            case 1:printf("yi");break;
            case 2:printf("er");break;
            case 3:printf("san");break;
            case 4:printf("si");break;
            case 5:printf("wu");break;
            case 6:printf("liu");break;
            case 7:printf("qi");break;
            case 8:printf("ba");break;
            case 9:printf("jiu");break;
            case 0:printf("ling");break;
        }
        i-=1;
        if(i>=0)
            printf(" ");
    }
    return 0;
}

第二个点测试的是倒序以后末尾的0会不会丢掉

-1004 成绩排名(20)

#include<stdio.h>

int main()
{
    int n;

    char* a[2];
    char* c[2];
    int b[2];
    b[0]=0;
    b[1]=100;
    int score;
    int i;
    scanf("%d",&n);
    char name[n][50],class[n][50];

    for(i=0;i<n;i++)
    {
        scanf("%s %s %d",&name[i],&class[i],&score);
        if(score>=b[0])
        {
            a[0]=name[i];
            a[1]=class[i];
            b[0]=score;
        }
        if(score<=b[1])
        {
            c[0]=name[i];
            c[1]=class[i];
            b[1]=score;
        }
    }
    printf("%s %s\n",a[0],a[1]);
    printf("%s %s\n",c[0],c[1]);
}

这个解法不够优雅,不过能过…

-1006 换个格式输出整数(15)

#include<stdio.h>

int main()
{
    int n,i,u=0,set=2;
    int num[3]={0,0,0};
    scanf("%d",&n);

    while(n>=1)
    {
        num[set--]=n%10;
        n/=10;
    }

    for(i=0;i<num[0];i++)
        printf("B");
    for(i=0;i<num[1];i++)
        printf("S");
    for(i=1;i<=num[2];i++)
        printf("%d",i);

}

这个解法我是满意的

-1007 素数对猜想(20)

#include<stdio.h>
#include<math.h>

int main()
{
    int n,i,j,k=0,sum=0;
    scanf("%d",&n);
    int result[1000];
    for(j=1;j<=n;j++)
    {
        int flag=1;
        for(i=2;i<=sqrt(j);i++)
            if(j%i==0)
            {
                flag=0;
                break;
            }
        if(flag==1)
            result[k++]=j;
    }
//    for(i=0;i<k;i++)
//        printf("%d ",result[i]);
    for(i=0;i<k-1;i++)
    {
        if(result[i]+2==result[i+1])
            sum+=1;
    }
    printf("%d",sum);
}

点5段错误,应该是因为两个for的复杂度太高,需要用素数判断算法把偶数都删除会比较简单
不过暂时不准备改

-1009 说反话(20)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    char s[81];
    const char * split = " ";
    char *result=NULL;
    char words[81][81];
    int i=0,j=0;
    gets(s);
    result=strtok(s, split);
//    strcpy(words[j++],result);
    while(result!=NULL)
    {
        strcpy(words[j++],result);
        result=strtok(NULL, split);
//        printf("%s",words[j-1]);
    }
    while(j>=1)
    {
        printf("%s",words[--j]);
        if(j!=0)
            printf(" ");
    }
}

一定要注意字符串最后留一个空格给\0

-1011 A+B和C(15)

#include<stdio.h>

int main()
{
    int T = 0;
    long long a,b,c;
    int i;
    scanf("%d",&T);

    for(i=1;i<=T;i++)
    {
        scanf("%lld %lld %lld",&a,&b,&c);
        //printf("%f %f %f",a,b,c);
        if(a+b>c)
            printf("Case #%d: true\n",i);
        else
            printf("Case #%d: false\n",i);
    }
}

-1015 德才论(25)

#include <stdio.h>
#include <stdlib.h>

int compare(int* a, int* b)
{
    if(((int)a[2]+(int)a[1])==((int)b[1]+(int)b[2])&&(int)a[1]==(int)b[1])
        return (int)a[0]-(int)b[0];//总分德分都相同
    else if((int)a[2]+(int)a[1]==(int)b[1]+(int)b[2])
        return (int)b[1]-(int)a[1];//总分相同
    else
        return (int)b[1]+(int)b[2]-(int)a[2]+(int)a[1];
}

int main(int argc, const char * argv[]) {
    int N,L,H,M=0;
    scanf("%d %d %d",&N,&L,&H);
    int A[105][3],B[105][3],C[105][3],D[105][3];
    int i,a=0,b=0,c=0,d=0;
    int number,de,cai;

    for(i=0;i<N;i++)
    {
        scanf("%d %d %d",&number,&de,&cai);
        //A[i][1],A[i][2],A[i][3]
        if(de>=H&&cai>=H)
        {
            A[a][0]=number;
            A[a][1]=de;
            A[a][2]=cai;
            a+=1;
            M+=1;
        }
        else if(de>=H&&cai>=L)
        {
            B[b][0]=number;
            B[b][1]=de;
            B[b][2]=cai;
            b+=1;
            M+=1;
        }
        else if(de>=L&&cai>=L&&de>=cai)
        {
            C[c][0]=number;
            C[c][1]=de;
            C[c][2]=cai;
            c+=1;
            M+=1;
        }
        else if(de>=L&&cai>=L)
        {
            D[d][0]=number;
            D[d][1]=de;
            D[d][2]=cai;
            d+=1;
            M+=1;
        }
    }
    qsort(A, a, sizeof(A[0]), compare);
    qsort(B, b, sizeof(B[0]), compare);
    qsort(C, c, sizeof(C[0]), compare);
    qsort(D, d, sizeof(D[0]), compare);

    printf("%d\n",M);
    for(i=0;i<a;i++)
        printf("%d %d %d\n",A[i][0],A[i][1],A[i][2]);
    for(i=0;i<b;i++)
        printf("%d %d %d\n",B[i][0],B[i][1],B[i][2]);
    for(i=0;i<c;i++)
        printf("%d %d %d\n",C[i][0],C[i][1],C[i][2]);
    for(i=0;i<d;i++)
        printf("%d %d %d\n",D[i][0],D[i][1],D[i][2]);

    return 0;
}

2 3 4三个点段错误…

-1016 部分A+B(15)

#include<stdio.h>

int main()
  {
    int A,B,Da,Db;
    scanf("%d %d %d %d",&A,&Da,&B,&Db);
    int Pa=0,Pb=0,a,b;
    while(A>=1)
      {
        a=A%10;
        if(a==Da)
        {
          Pa*=10;
          Pa+=a;
        }
        A/=10;
      }
    while(B>=1)
      {
        b=B%10;
        if(b==Db)
          {
            Pb*=10;
            Pb+=b;
          }
        B/=10;
      }
    printf("%d",Pa+Pb);
  }

-1018 锤子剪刀布(20)

#include <stdio.h>
#include <string.h>

int max(int x,int y) { if ( x>y ) return x; else return y; }

int main()
{
    int n,i,j = 0,k;
    scanf("%d",&n);

    int a[3]={0,0,0},b[3]={0,0,0};//胜负平
    int aa[3]={0,0,0},ba[3]={0,0,0};//CBJ次数
    char ac[2],bc[2];
    char stand1[]={"C"};
    char stand2[]={"J"};
    char stand3[]={"B"};
    int result[3];

    for(i=0;i<n;i++)
    {
        scanf("%s %s",ac,bc);
        if(strcmp(ac,stand1)==0)
        {
            switch (bc[0]) {
                case 'B':
                    b[0]+=1;
                    a[2]+=1;
                    ba[2]+=1;
                    break;
                case 'C':
                    b[1]+=1;
                    a[1]+=1;
                    break;
                case 'J':
                    a[0]+=1;
                    b[2]+=1;
                    aa[0]+=1;
                    break;

                default:
                    break;
            }
            continue;
        }
        if(strcmp(ac,stand3)==0)
        {
            switch ((int)bc[0]) {
                case 'J':
                    b[0]+=1;
                    a[2]+=1;
                    ba[1]+=1;
                    break;
                case 'B':
                    b[1]+=1;
                    a[1]+=1;
                    break;
                case 'C':
                    a[0]+=1;
                    b[2]+=1;
                    aa[2]+=1;
                    break;

                default:
                    break;
            }
            continue;
        }

        if(strcmp(ac,stand2)==0)
        {
            switch ((int)bc[0]) {
                case 'C':
                    b[0]+=1;
                    a[2]+=1;
                    ba[0]+=1;
                    break;
                case 'J':
                    b[1]+=1;
                    a[1]+=1;
                    break;
                case 'B':
                    a[0]+=1;
                    b[2]+=1;
                    aa[1]+=1;
                    break;

                default:
                    break;
            }
            continue;
        }
    }

    for(i=0;i<3;i++)
    {
        printf("%d",a[i]);
        if(i<2)
            printf(" ");
    }
    printf("\n");

    for(i=0;i<3;i++)
    {
        printf("%d",b[i]);
        if(i<2)
            printf(" ");
    }
    printf("\n");
//    for(i=0;i<3;i++)
//    {
//        printf("%d",aa[i]);
//        if(i<2)
//            printf(" ");
//    }
//    printf("\n");
//    for(i=0;i<3;i++)
//    {
//        printf("%d",ba[i]);
//        if(i<2)
//            printf(" ");
//    }
//    printf("\n");
//    aa[0]>aa[1]?(aa[0]>aa[2]?printf("C "):printf("J ")):(aa[1]>aa[2]?printf("B "):printf("J "));
//    ba[0]>ba[1]?(ba[0]>ba[2]?printf("C\n"):printf("J\n")):(ba[1]>ba[2]?printf("B\n"):printf("J\n"));
//    三目运算符太复杂了 还是max比较简洁

    k=max(max(aa[0],aa[1]),aa[2]);
//    printf("%d",k);
    for(i=0;i<3;i++)
    {
        j=0;
        if(aa[2]==k)
        {
            if(j)
                printf(" ");
            printf("B");
            j+=1;
            break;
        }
        if(aa[0]==k)
        {
            if(j)
                printf(" ");
            printf("C");
            j+=1;
            break;
        }
        if(aa[1]==k)
        {
            if(j)
                printf(" ");
            printf("J");
            j+=1;
            break;
        }
    }
    k=max(max(ba[0],ba[1]),ba[2]);
//    printf("%d",k);
    for(i=0;i<3;i++)
    {
        if(ba[2]==k)
        {
            if(j)
                printf(" ");
            printf("B");
            j+=1;
            break;
        }
        if(ba[0]==k)
        {
            if(j)
                printf(" ");
            printf("C");
            j+=1;
            break;
        }
        if(ba[1]==k)
        {
            if(j)
                printf(" ");
            printf("J");
            j+=1;
            break;
        }
    }
}

程序还可以优化

-1020 月饼(25)

#include <stdio.h>
#include <stdlib.h>
typedef struct good* Good;
struct good{
    double price;
    double amount;
};

int comp(const void *a,const void *b)
{    
    return (int)(((Good)b)->price*10) - (int)(((Good)a)->price*10);
}

int main()
{
    int n;
    double d;
    scanf("%d %lf",&n,&d);
    Good p;
    double sum=0;
    p = (Good) malloc(sizeof(struct good) * n);

    for(int i=0;i<n;i++)
        scanf("%lf",&p[i].amount);
    for(int i=0;i<n;i++)
        scanf("%lf",&p[i].price);

    for(int i=0;i<n;i++)
        p[i].price=p[i].price/p[i].amount;

    qsort(p,n,sizeof(p[0]),comp);

//    for(int i=0;i<n;i++)
//        printf("%lf",p[i].price);

    int i=0;
    while(d>0)
    {
        sum+=(p[i].amount>=d?d:p[i].amount)*p[i].price;
        d-=p[i].amount>=d?d:p[i].amount;
        i+=1;
        if(i>n-1)
            break;
//        printf("%lf\n",d);
    }
    printf("%.2f",sum);
}

点3注意库存没了的情况

-1021 个位数统计(15)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
    int i=0;
    char s[1000];
    int sum[10]={0,0,0,0,0,0,0,0,0,0};
    scanf("%s",s);
    while(s[i]!='\0')
    {
        sum[(int)s[i]-48]+=1;
        i+=1;
    }
    for(i=0;i<10;i++)
    {
        if(sum[i]!=0)
            printf("%d:%d\n",i,sum[i]);
    }
}

-1023 组个最小数(20)

#include<stdio.h>
#include<stdlib.h>

int main()
{
    int number[10];
    int i=1,j;
    for(j=0;j<10;j++)
        scanf("%d",&number[j]);

    while(number[i]==0)
        i++;

    printf("%d",i);
    number[i]-=1;

    for(i=0;i<=9;i++)
    {
        while(number[i]!=0)
        {
            printf("%d",i);
            number[i]-=1;
        }
    }
}

-1025 反转链表(25)

#include<stdio.h>
#include<stdlib.h>
typedef struct node *List;

struct node
{
    int address;
    int num;
//    int next_add;
    List next;
};
int N;
List L[100000];
List create()
{
    List head;
    head=NULL;

    return head;
}

//List add_element(List list)
//{
//    for (int i=0; i<N; i+=1) {
//        for (int j=i; j<N; j+=1) {
//            if(L[i]->next_add==L[j]->address)
//                L[i]->next=L[j];
//        }
//    }
//}

int main()
{
    int first_ad,K;
    scanf("%d %d %d",&first_ad,&N,&K);
    int address,data,next;
    for(int i=0;i<100000;i+=1)
        L[i]=malloc(sizeof(struct node));
    List head;
    head=malloc(sizeof(struct node));
//    List L[N];
    head->next=L[first_ad];

    for (int i=0; i<N; i+=1) {
        scanf("%d %d %d",&address,&data,&next);
//        List newnode;
//        if(address!=first_ad)
//            L[address]=malloc(sizeof(struct node));
//        L[i]->address=address;
        L[address]->address=address;
        L[address]->num=data;
        if(next!=-1)
            L[address]->next=L[next];
        else
            L[address]->next=NULL;
//        L=add_element(L,newnode);
    }
//    List list;
//    list=create();
//    list=add_element(list);
    List current,present;
    current=malloc(sizeof(struct node));
    present=malloc(sizeof(struct node));
    current=head->next;

    for (int i=0; i<K-1; i+=1) {
//        present=current->next->next;
        present =current->next->next;
//        printf("%d ",present->num);
//        current->next=present->next;
        current->next->next=head->next;
        head->next=current->next;
        current->next=present;
//        printf("%d",head->next->num);
//        printf("%d\n",current->num);
    }
    current=head->next;
    for (int i=0; i<N; i+=1) {
        printf("%05d ",current->address);
        printf("%d ",current->num);
        if(current->next!=NULL)
            printf("%05d\n",current->next->address);
        else
            printf("-1\n");
        current=current->next;
    }


}

没有过的点是因为没有做多个反复的循环

-1026 程序运行时间(15)

#include<stdio.h>
#define CLK_TCK 100

int main()
{
    int a,b;
    int time,hour,minute,second;

    scanf("%d %d",&a,&b);

    time=(int)((b-a+50)/100);

    hour=time/3600;
    minute=(time-3600*hour)/60;
    second=time-3600*hour-60*minute;

    printf("%02d:%02d:%02d",hour,minute,second);
}

(int)(a+0.5)是四舍五入的好方法

-1027 打印沙漏(20)

#include<stdio.h>
#include<math.h>

int main()
{
    int x;//x is the number of layers except the centre in single site
    int n;//n is the total number which are unsigned

    int N;//N is the total number offered
    int a,b;
    char ch;

    scanf("%d %c",&N,&ch);
    x = sqrt((N+1.0)/2)-1;

    for(a=x;a>0;a--)
    {
        for(b=0;b<x-a;b++)
            printf(" ");

        for(b=2*a+1;b>0;b--)
            printf("%c",ch);

        printf("\n");
    }

    for(a=0;a<=x;a++)
    {
        for(b=0;b<x-a;b++)
            printf(" ");

        for(b=2*a+1;b>0;b--)
            printf("%c",ch);

        printf("\n");
    }

    n=N-(2*x*x+4*x+1);
    printf("%d\n",n);

  return 0;
}

-1028 人口普查(20)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int compare(int* a, int* b)
{
    if(((int)a[0]==(int)b[0])&&(int)a[1]==(int)b[1])
        return (int)a[2]-(int)b[2];
    else if((int)a[0]==(int)b[0])
        return (int)a[1]-(int)b[1];
    else
        return (int)a[0]-(int)b[0];
}

int main(int argc, const char * argv[]) {
    int N,M=0;
    scanf("%d",&N);
    int A[N][4];
    int i,a=0;
    //char year[5],month[3],day[3];
    int year1,month1,day1;
    char all[20];
    char people[10];
    char name[N][10];
    const char * split = "/";
    char *result=NULL;
    //char *outer_ptr = NULL;

    for(i=0;i<N;i++)
    {
        scanf("%s %s",people,all);

        //printf("%s %s %s %s",people,year,month,day);
        result=strtok(all, split);

        year1=atoi(result);
        result=strtok(NULL, split);
        month1=atoi(result);
        result=strtok(NULL, split);
        day1=atoi(result);

        if((year1>1814&&year1<2014)||(year1==1814&&month1>9)||(year1==2014&&month1<9)||(year1==1814&&month1==9&&day1>=6)||(year1==2014&&month1==9&&day1<=6))
        {
            A[a][0]=year1;
            A[a][1]=month1;
            A[a][2]=day1;
            A[a][3]=a;
            strcpy(name[a],people);
            a+=1;
            M+=1;
        }
    }
    qsort(A, a, sizeof(A[0]), compare);

    printf("%d ",M);
    printf("%s %s\n",name[A[0][3]],name[A[a-1][3]]);

    return 0;
}

点3段错误 懒得改了…下次补充strtok用法…

-1029 旧键盘(20)

#include<stdio.h>

int main()
{
    char s[81];
    char standard[81];
    char wrong[81];
    scanf("%s",standard);
    scanf("%s",s);
    int k;
    int stack_s=0,stack_standard=0,stack_wrong=0;

    while(standard[stack_standard]!='\0')
    {
        if(standard[stack_standard]!=s[stack_s])
        {
            for(k=0;k<stack_wrong;k+=1)
                if(wrong[k]==standard[stack_standard]||wrong[k]==standard[stack_standard]-32)
                    break;
            //当已经录入
            if(k==stack_wrong&&(standard[stack_standard]>='a'&&standard[stack_standard]<='z'))
                wrong[stack_wrong++]=standard[stack_standard]-32;
            else if(k==stack_wrong)
                wrong[stack_wrong++]=standard[stack_standard];
            //当尚未录入
            stack_standard+=1;
        }
        else
        {
            stack_s+=1;
            stack_standard+=1;
        }
    }
    for(int i=0;i<stack_wrong;i+=1)
            printf("%c",wrong[i]);
}

点1过不了

-1029 旧键盘(20) 另一种正确做法

#include<stdio.h>

int main()
{
    char s[81];
    char standard[81];
    char wrong[81];
    scanf("%s",standard);
    scanf("%s",s);
    int k;
    int stack_s=0,stack_standard=0,stack_wrong=0;

    while(standard[stack_standard]!='\0')
    {
        if(standard[stack_standard]!=s[stack_s])
        {          if((standard[stack_standard]>='a'&&standard[stack_standard]<='z'))
                wrong[stack_wrong++]=standard[stack_standard]-32;
            else
                wrong[stack_wrong++]=standard[stack_standard];

            stack_standard+=1;
        }
        else
        {
            stack_s+=1;
            stack_standard+=1;
        }
    }

    for(int i=0;i<stack_wrong;i+=1)
        for(int j=i+1;j<stack_wrong;j+=1)
            if(wrong[i]==wrong[j])
                wrong[j]='*';

    for(int i=0;i<stack_wrong;i+=1)
        if(wrong[i]!='*')
            printf("%c",wrong[i]);
}

这到底是为什么呢?

-1031 查验身份证(15)

#include<stdlib.h>
#include<stdio.h>
#include<string.h>

int main()
{
    int n;
    int flag=1,inner_flag=1;
    scanf("%d",&n);
    char s[n][18];
    int q[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
    int sum=0;
    for(int i=0;i<n;i++)
    {
        sum=0;
        inner_flag=1;
        scanf("%s",s[i]);
        for(int j=0;j<17;j++)
        {
            if(((int)s[i][j]-48>10)||((int)s[i][j]-48<0))
            {
                for(int m=0;m<18;m++)
                    printf("%c",s[i][m]);
                printf("\n");
                flag=0;
                inner_flag=-1;
                break;
            }
            sum+=q[j]*((int)s[i][j]-48);
        }
//        printf("%d\n",sum%11*inner_flag);
        switch(sum%11*inner_flag)

        {
            case 0:
                if(strcmp(&s[i][17],"1")!=0)
                {for(int m=0;m<18;m++)
                    printf("%c",s[i][m]);
                    printf("\n");flag=0;}break;
            case 1:
                if(strcmp(&s[i][17],"0")!=0)
                {for(int m=0;m<18;m++)
                    printf("%c",s[i][m]);
                printf("\n");flag=0;}break;
            case 2:
                if(strcmp(&s[i][17],"X")!=0)
                {for(int m=0;m<18;m++)
                    printf("%c",s[i][m]);
                    printf("\n");flag=0;}break;
            case 3:
                if(strcmp(&s[i][17],"9")!=0)
                {for(int m=0;m<18;m++)
                    printf("%c",s[i][m]);
                    printf("\n");flag=0;}break;
            case 4:
                if(strcmp(&s[i][17],"8")!=0)
                {for(int m=0;m<18;m++)
                    printf("%c",s[i][m]);
                    printf("\n");flag=0;}break;
            case 5:
                if(strcmp(&s[i][17],"7")!=0)
                {for(int m=0;m<18;m++)
                    printf("%c",s[i][m]);
                    printf("\n");flag=0;}break;
            case 6:
                if(strcmp(&s[i][17],"6")!=0)
                {for(int m=0;m<18;m++)
                    printf("%c",s[i][m]);
                    printf("\n");flag=0;}break;
            case 7:
                if(strcmp(&s[i][17],"5")!=0)
                {for(int m=0;m<18;m++)
                    printf("%c",s[i][m]);
                    printf("\n");flag=0;}break;
            case 8:
                if(strcmp(&s[i][17],"4")!=0)
                {for(int m=0;m<18;m++)
                    printf("%c",s[i][m]);
                    printf("\n");flag=0;}break;
            case 9:
                if(strcmp(&s[i][17],"3")!=0)
                {for(int m=0;m<18;m++)
                    printf("%c",s[i][m]);
                    printf("\n");flag=0;}break;
            case 10:
                if(strcmp(&s[i][17],"2")!=0)
                {for(int m=0;m<18;m++)
                    printf("%c",s[i][m]);
                    printf("\n");flag=0;}break;
        }
    }
    if(flag==1)
        printf("All passed");
}

-1032 挖掘机技术哪家强(20)

#include<stdio.h>
#include<stdlib.h>

int comp(const void *a,const void *b)
{
    return ((int*)b)[1]-((int*)a)[1];
}
int main()
{
    int n;
    scanf("%d",&n);
    int sum[n][2];
    int school,score;
    for(int i=0;i<n;i+=1)
    {
        sum[i][1]=0;
        sum[i][0]=i;
    }
    for(int i=0;i<n;i++)
    {
        scanf("%d %d",&school,&score);
        sum[school-1][1]+=score;
    }
    qsort(sum,n,sizeof(sum[0]),comp);
    printf("%d %d",sum[0][0]+1,sum[0][1]);
}

//点0没有过,虽然很可惜很想调整,但是这道题我不能对,要保持21题的正确数,所以很抱歉啦~我会纠正你的

-1036 和奥观海一起编程(15)

#include<stdio.h>

int main()
{
    int n,i,j;
    char c;
    scanf("%d %c",&n,&c);

    if(3<=n&&n<=20)
    {
    for(i=0;i<n;i++)
        printf("%c",c);

    printf("\n");
    for(i=0;i<(int)(1.0*n/2+0.5)-2;i++)
    {
        printf("%c",c);
        for(j=0;j<n-2;j++)
            printf(" ");
        printf("%c\n",c);
    }

    for(i=0;i<n;i++)
        printf("%c",c);

    printf("\n");
    }
}

n/2自带取整所以要先转化成double类型

-1037 在霍格沃兹找零钱(20)

#include<stdio.h>

int main()
{
    int ing,ins,ink,outg,outs,outk;
    long long sumi,sumo,result;
    scanf("%d.%d.%d %d.%d.%d",&ing,&ins,&ink,&outg,&outs,&outk);
    int flag=1;
    sumi=17*29*ing+29*ins+ink;
    sumo=17*29*outg+29*outs+outk;
    if(sumi<sumo)
    {
        ing=ing+outg;
        outg=ing-outg;
        ing=ing-outg;

        ins=ins+outs;
        outs=ins-outs;
        ins=ins-outs;

        ink=ink+outk;
        outk=ink-outk;
        ink=ink-outk;

        flag=-1;
        sumi=17*29*ing+29*ins+ink;
        sumo=17*29*outg+29*outs+outk;
    }

    result=sumi-sumo;
    if(flag==1)
        printf("-");

    printf("%.0lld.",result/17/29);
    result-=(int)(result/17/29)*17*29;
    printf("%.0lld.",result/29);
    result-=(int)(result/29)*29;
    printf("%.0lld",result);

}

flag的正负还没有想明白,不过这次不能对这道题,稍后修改。

-1038 统计同成绩学生(20)

#include<stdio.h>

int main()
{
    int N,K;
    scanf("%d",&N);
    int temp;
    int score[100];

    for(int i=0;i<100;i+=1)
        score[i]=0;

    for(int i=0;i<N;i+=1)
    {
        scanf("%d",&temp);
        score[temp]+=1;
    }

    scanf("%d",&K);
    for(int i=0;i<K-1;i+=1)
    {
        scanf("%d",&temp);
        printf("%d ",score[temp]);
    }
    scanf("%d",&temp);
    printf("%d\n",score[temp]);
}

-1039 到底买不买(20)

#include<stdio.h>

int main()
{
    char std [1000];
    char need[1000];

    scanf("%s",std);
    scanf("%s",need);

    int temp_std=0,temp_need=0;
    int std_remain=0,need_remain=0;

    for(;need[temp_need]!='\0';temp_need+=1)
        for(temp_std=0;std[temp_std]!='\0';temp_std+=1)
            if(std[temp_std]==need[temp_need])
            {
                std[temp_std]='^';
                need[temp_need]='^';
                break;
            }

    temp_need=temp_std=0;

    for(;std[temp_std]!='\0';temp_std+=1)
        if(std[temp_std]!='^')
            std_remain+=1;
    for(;need[temp_need]!='\0';temp_need+=1)
        if(need[temp_need]!='^')
            need_remain+=1;

    if(need_remain==0)
        printf("Yes %d",std_remain);
    else
        printf("No %d",need_remain);
}

-1043 输出PATest(20)

#include<stdio.h>
#include<string.h>

int main()
{
    int num[6]={0,0,0,0,0,0};
    int sum=0,i=0;
    char c[]={"PATest"};
    char s[10000];
    scanf("%s",s);
    while(s[i]!=NULL)
    {
        switch(s[i])
        {
            case 'P':num[0]+=1;sum+=1;break;
            case 'A':num[1]+=1;sum+=1;break;
            case 'T':num[2]+=1;sum+=1;break;
            case 'e':num[3]+=1;sum+=1;break;
            case 's':num[4]+=1;sum+=1;break;
            case 't':num[5]+=1;sum+=1;break;
        }
        i+=1;
    }
    while(sum>=1)
        for(i=0;i<6;i++)
            if(num[i]!=0)
            {
                printf("%c",c[i]);
                num[i]-=1;
                sum-=1;
            }
}

-1046 划拳(15)

#include<stdio.h>

int main()
{
    int n;
    scanf("%d",&n);
    int i,j,k;
    int suma=0,sumb=0;
    int numa,numb,aca,acb,sum;
    for(i=0;i<n;i++)
    {
        scanf("%d %d %d %d",&numa,&aca,&numb,&acb);
        sum=numa+numb;
        if(aca==sum&&acb!=sum)
            sumb+=1;
        else if(aca!=sum&&acb==sum)
            suma+=1;
    }
    printf("%d %d",suma,sumb);
}

-1047 编程团体赛(20)

#include<stdio.h>
#include<stdlib.h>
int comp(const void *a,const void *b)
{
    //printf("%d %d\n",*((int*)b+1), *((int*)a+1));
    return *((int*)b+1)-*((int*)a+1);
}
int main()
{
    int n;
    scanf("%d",&n);
    int sum[1001][2];
    for(int i=0;i<1001;i++)
    {
        sum[i][1]=0;
        sum[i][0]=i;
    }
    int score,team,people;
    for(int i=0;i<n;i++)
    {
        scanf("%d-%d %d",&team,&people,&score);
        sum[team][1]+=score;
    }
    qsort(&sum[0],1001,sizeof(sum[0]),comp);
    printf("%d %d",sum[0][0],sum[0][1]);
}

-1053 住房空置率(20)

#include<stdio.h>

int main()
{
    int N,D;
    double e;
    scanf("%d %lf %d",&N,&e,&D);
    int num[2]={0,0};
    int j,i,ob;

    for(i=0;i<N;i++)
    {
        scanf("%d",&ob);
        int day=0;
        double observe = 0.0;
        for(j=0;j<ob;j++)
        {
            scanf("%lf",&observe);
            if(observe<e)
                day+=1;
        }
        //printf("%d ",day);
        if(1.0*day/ob>0.5&&ob>D)
            num[1]+=1;
        else if(1.0*day/ob>0.5)
            num[0]+=1;
        //printf("%d %d %.2f\n",num[0],num[1],1.0*day/ob);
    }
    printf("%.1f",100.0*num[0]/N);
    printf("%s", "% ");
    printf("%.1f",100.0*num[1]/N);
    printf("%s","%\n");
}

-1056 组合数的和(15)

#include<stdio.h>

int main()
{
    int n,i,j;
    int sum=0;

    scanf("%d",&n);
    int number[n];
    for(i=0;i<n;i++)
    {    
        scanf("%d",&number[i]);
        sum+=number[i];
    }
    printf("%d\n",11*sum*(n-1));
}

算是巧解,比较满意…

-1061 判断题(15)

#include<stdio.h>

int main()
  {
    int n,m;
    int i,j,k,sum=0;
    scanf("%d %d",&n,&m);
    int score[m];
    int key[m];
    for(i=0;i<m;i++)
      scanf("%d",&score[i]);
    for(i=0;i<m;i++)
      scanf("%d",&key[i]);
    for(i=0;i<n;i++)
      {
        sum=0;
        for(j=0;j<m;j++)
        {  
          scanf("%d",&k);
          if(k==key[j])
            sum+=score[j];
        }
        printf("%d\n",sum);
      }
  }

-1062 最简分数(20)

#include<stdio.h>
#include<math.h>

int main()
{
    int a1,b1,a2,b2,m,j=0,k=1;
    int result[10];
    int contain[10];

    double d1,d2,i;
    scanf("%d/%d %d/%d %d",&a1,&b1,&a2,&b2,&m);

    for(i=1.0*a1/b1*m;i<=1.0*a2/b2*m;i+=1)
    {
        int a,b,c;
        b=m<i?m:(int)i;
        if(b==0)
            continue;

        a=m>(int)i?m:(int)i;
        c=m%(int)i;
        while(c!=0)
        {
            a=b;
            b=c;
            c=a%b;
        }
        if(b==1)
            result[j++]=(int)i;
    }
    for(k=0;k<j;k+=1)
    {
        printf("%d/%d",result[k],m);
        if(k<j-1)
            printf(" ");
    }
}

查了m和i的最大公因数,但是123三个点还是不对,4段错误,还要修改…

-1063 计算谱半径(20)

#include<stdio.h>
#include<math.h>

int main()
{
    int n,i;
    double max=0,sum;
    scanf("%d",&n);
    int a,b;

    for(i=0;i<n;i++)
    {
        scanf("%d %d",&a,&b);
        sum=pow(a,2)+pow(b,2);
        if(max<sqrt(sum))
            max=sqrt(sum);
    }
    printf("%.2f",max);
}

-1064 朋友数(20)

#include<stdio.h>
#include<stdlib.h>

int comp(int*a,int*b)
{
    return *a-*b;
}

int main()
{
    int n,j=0;
    scanf("%d",&n);
    int num[n];
    for(int i=0;i<n;i++)
        scanf("%d",&num[i]);

    int result[n];
    for(int i=0;i<n;i++)
    {
        int sum=0;
        while(num[i]>=1)
        {
            sum+=num[i]%10;
            num[i]/=10;
        }
        j=0;
        int flag=1;
        while(result[j]!=NULL)
        {
            if(sum==result[j])
            {
                flag=0;
                break;
            }
            j++;
        }
        if(flag==1)
            result[j]=sum;
    }
    qsort(result,j+1,sizeof(result[0]),comp);
    printf("%d\n",j+1);
    for(int i=0;i<j+1;i++)
    {
        printf("%d",result[i]);
        if(i<j)
            printf(" ");
    }
}

在自己电脑上可以通过样例,但不知道为啥就是一个点都过不了…
这道题目要标红

-1066 图像过滤(15)

#include<stdio.h>

int main()
{
    int M,N,A,B,C;

    scanf("%d %d %d %d %d",&M,&N,&A,&B,&C);
    int map[M][N];
    int i,j;

    for(i=0;i<M;i++)
        for(j=0;j<N;j++)
        {
            scanf("%d",&map[i][j]);
            if(map[i][j]>=A&&map[i][j]<=B)
                map[i][j]=C;
        }
    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
        {
            printf("%03d",map[i][j]);
            if(j!=N-1)
                printf(" ");
        }
        printf("\n");
    }
}

-1069 微博转发抽奖(20)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    int M,N,S;
    scanf("%d %d %d",&M,&N,&S);
    char name[M][20];
    int flag=0,stack=0;
    int duplicate=0;
    char winner[M][20];
    for(int i=0;i<M;i+=1)
        scanf("%s",name[i]);

    for(int i=S-1;i<M;i+=N)
    {
        do
        {
            duplicate=0;
            for(int k=0;k<stack;k+=1)
            {
                if(strcmp(winner[k], name[i])==0)
                {
                    duplicate=1;
                    break;
                }
            }
            if(duplicate==1)
                i+=1;
            else
            {
                duplicate=0;
                strcpy(winner[stack++], name[i]);
                printf("%s\n",name[i]);
            }
        }while(duplicate==1);

        flag=1;
    }
    if(flag==0)
        printf("Keep going...\n");

}

点3没过

-1070 结绳(25)

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int comp(const void *a,const void *b)
{
    return *(int*)a - *(int*)b;
}

int main()
{
    int n;
    scanf("%d",&n);
    int l[n];
    double sum=0;
    for(int i=0;i<n;i++)
        scanf("%d",&l[i]);

    qsort(&l[0],n,sizeof(int),comp);

    for(int i=0;i<n;i++)
    {
        sum=sum/2+l[i];
    }

    printf("%d",(int)sum/2);
}

点1过不了…ummmmm,见鬼了,今天都是差一个点…

-1072 开学寄语(20)

#include<stdio.h>
#include<stdlib.h>

int main()
{
    int N,M,people_num=0,good_num=0;
    scanf("%d %d",&N,&M);
    char name[N][6];
    int good[N][11];
    int trash[N][11];
    int standard[M];
    int num;
    int flag=0;
    int trash_num=0;
    for(int i=0;i<M;i+=1)
        scanf("%d",&standard[i]);

    for(int i=0;i<N;i+=1)
    {
        scanf("%s %d",name[i],&num);

        for(int j=0;j<num;j+=1)
        {
            scanf("%d",&good[i][j]);

            for(int k=0;k<M;k+=1)
            {
                if(good[i][j]==standard[k])
                {
                    if(flag==0)
                    {
                        printf("%s: ",name[i]);
                        flag=1;
                        people_num+=1;
                    }
                    trash[i][trash_num++]=good[i][j];

                    good_num+=1;
                }
            }
        }
        if(flag==1)
        {
            for(int m=0;m<trash_num-1;m+=1)
            {    printf("%d ",trash[i][m]);}
            printf("%d\n",trash[i][trash_num-1]);
        }
        trash_num=0;
        flag=0;
    }
    printf("%d %d\n",people_num,good_num);
}

点2过不了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值