武汉大学C语言上机训练系统练习

2016-08-20 findneo 更多博文 » 博客 » GitHub »

C

原文链接 http://findneo.tech/160820WHUOJStarter/
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。


WHU OJ ,已无法访问

doing

rank

1021乒乓球比赛

#include<stdio.h>
int main()
{
    char i,j,k;
    for(i='X'; i<'X'+3; i++)
    {
        for(j='X'; j<'X'+3; j++)
        {
            for(k='X'; k<'X'+3; k++)
            {
                if(j!=i&&k!=i&&k!=j)
                {
                    printf("%c %c\n%c %c\n%c %c\n",'A',i,'B',j,'C',k);
                }
            }
        }
    }
    for(i='X'; i<'X'+3; i++)
    {
        for(j='X'; j<'X'+3; j++)
        {
            for(k='X'; k<'X'+3; k++)
            {
                if(j!=i&&k!=i&&k!=j)
                {
                    if(i=='X'||k=='X'||k=='Z')
                    {
                        continue;
                    }
                    else
                    {
                        printf("%c %c\n%c %c\n%c %c\n",'A',i,'B',j,'C',k);
                    }
                }
            }
        }
    }
    return 0;
}

1025计算时间

#include<stdio.h>
#include<stdlib.h>
int time_elapse(int hour, int minute, int second)
{
    return hour*3600+minute*60+second;
}
int main()
{
    int n;
    char t[9],s[9];
    int a,b,c,d,e,f;
    int s1,s2;
    scanf("%d",&n);
    for(; n>0; n--)
    {
        while(getchar()!='\n');
        scanf("%s%s",t,s);
        a=t[0]*10+t[1]-528;
        b=t[3]*10+t[4]-528;
        c=t[6]*10+t[7]-528;
        d=s[0]*10+s[1]-528;
        e=s[3]*10+s[4]-528;
        f=s[6]*10+s[7]-528;
        s1=time_elapse(a,b,c);
        s2=time_elapse(d,e,f);
        printf("%d %d %d\n",s1,s2,(s1>s2?s1-s2:s2-s1));

    }
    return 0;
}

1026非递归斐波那契

#include<stdio.h>
#include<stdlib.h>
int fibonacci(int n)
{
    int a,b;
    a=b=1;
    while(n-->1){
        b=b+a;
        a=b-a;
    }
    return b;
}
int main()
{
    int n,m;
    scanf("%d",&n);
    for(; n>0; n--)
    {
        scanf("%d",&m);
        printf("%d\n",fibonacci(m));

    }
    return 0;
}



/*
#include<iostream>
using namespace std;
int main(){
    int n, i, f1, f2;
    cin>>n;
    f1 = 0;
    f2 = 1;
    while(n-->1){
        f2 += f1;
        f1 = f2 - f1;
    }
    cout<<(n==-1?0:f2)<<endl;
}
*/

1028递归转换进制

#include<stdio.h>
#include<stdlib.h>
//#define A 10
#define B 7
int change(int n)
{
    int temp;
    if(n<B)
    {
        printf("%d",n);
        return 0;
    }
    else
    {
        change(n/B);
        change(n%B);
    }
}
int main()
{
    int n,m;
    scanf("%d",&n);
    for(; n>0; n--)
    {
        scanf("%d",&m);
        change(m);
        printf("\n");

    }
    return 0;
}

1029求自然对数

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int i;
    double fenMu=1;
    double ans=1;
    for(i=1;fenMu-1e15<0;i++){
        fenMu*=i;
        ans+=1.0/fenMu;
    }
    printf("%.14lf\n",ans);
    return 0;
}

1030二次方程

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int fangcheng(int a,int b,int c)
{
    double x1,x2,dal;
    if(a!=0)
    {
        if(b*b-4*a*c>0)
        {
            dal=pow(b*b-4*a*c,0.5);
            x1=(-b-dal)/(double)(2*a);
            x2=(-b+dal)/(double)(2*a);
            if(a<0)
            {
                dal=x1;
                x1=x2;
                x2=dal;
            }
            printf("%.2lf %.2lf",x1,x2);
            return 0;
        }
        else if(b*b-4*a*c==0)
        {
            if(b==0)
            {
                printf("0.00");
                return 0;
            }
            else
            {
                printf("%.2lf",-(double)b/(2*a));
                return 0;
            }
        }
        else
        {
            printf("NULL");
            return 0;
        }
    }

    else
    {
        if(b==0)
        {
            if(c==0)
            {
                printf("NULL");
                return 0;
            }
            else
            {
                printf("NULL");
                return 0;
            }
        }
        else
        {
            if(c==0)
            {
                printf("0.00");
                return 0;
            }
            else
            {
                printf("%.2lf",-c/(double)b);
                return 0;
            }
        }
    }
}
int main()
{
    int n,a,b,c,i;
    scanf("%d",&n);
    for(i=1; i<=n; i++)
    {
        scanf("%d%d%d",&a,&b,&c);
        printf("Case %d: ",i);
        fangcheng(a,b,c);
        printf("\n");
    }
    return 0;
}

1034十进制转二进制

#include<stdio.h>
int main()
{
    int n,i,j;
    long long a;
    int b[33];
    scanf("%d",&n);
    for(i=0; i<n; i++)
    {
        scanf("%lld",&a);
        j=0;
        if(a==0){printf("%ld\n",a);continue;}
        while(a!=0)
        {
            b[j++]=a%2;
            a=a/2;
        }
        while(--j>=0){
            printf("%d",b[j]);
        }
        printf("\n");
    }

    return 0;
}

1035十进制转其他

#include<stdio.h>
int main()
{
    int n,i,j,jidi;
    long long a;
    int b[33];
//    scanf("%d",&n);
    n=60000;
    printf("本程序提供2**32以下十进制正整数转任意36以内进制结果\
           \n输入(-1,-1)结束\n");
    printf("请每次输入两个数,前者作为基底,后者待转换\n");
    for(i=0; i<n; i++)
    {

        scanf("%d%lld",&jidi,&a);if(jidi==-1){break;}
        j=0;
        if(a==0){printf("%lld\n",a);continue;}
        while(a!=0)
        {
            b[j++]=a%jidi;
            a=a/jidi;
        }
        while(--j>=0){
                if(b[j]>9){printf("%c",'A'-10+b[j]);}
            else {printf("%d",b[j]);}
        }
        printf("\n");
    }

    return 0;
}

1036字符替换

#include<stdio.h>
int substitute(char str[], char oldchar, char newchar)
{
    int time=0;
    int i=0;
    while(str[i]!='\0')
    {
        if(str[i]==oldchar)
        {
            str[i]=newchar;
            time++;
        }
        i++;
    }
    return time;
}
int main()
{
    char str[1001];
    char oldchar,newchar;
    while (scanf("%s %c %c", str, &oldchar, &newchar) == 3) /* 或!= EOF , 但前者更好 */

    {

        printf("%d ",substitute(str,oldchar,newchar));
        puts(str); //处理

    }
    return 0;
}

1037关键词统计

#include<stdio.h>
#include<string.h>
int main()
{
    int i,j,k,n,times,flag;
    char str[10][11];
    char long_str[10001];
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%s",str[i]);
    }
    scanf("%s",long_str);
    for(i=0;i<n;i++){
            times=0;
        for(j=0;j<strlen(long_str)-strlen(str[i])+1;){
            if(long_str[j]==str[i][0]){
                flag=0;
                for(k=0;k<strlen(str[i]);k++){
                    if(long_str[j+k]!=str[i][k]){
                        flag=1;break;
                    }
                }
                if(flag==1){j++;}
                else{
                    times++;j+=k;
                }
            }
            else{j++;}
        }
        printf("%d\n",times);
    }
    return 0;
}

1037学号查询

#include<stdio.h>
#include<string.h>
struct student
{
    char name[32];
    char birth[9];
    char num[9];
    char major[32];
};
int main()
{
    struct student stu[30];
    int i,j,n;
    char num1[9];
    for(i=0;i<30;i++){
        scanf("%s %s %s %s",stu[i].name,stu[i].birth,stu[i].num,stu[i].major);
    }
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%s",num1);
        for(j=0;j<30;j++){
            if(strcmp(stu[j].num,num1)==0){
               printf("%s %s %s %s\n",stu[j].name,stu[j].birth,stu[j].num,stu[j].major);
            break;
            }
        }
        if(j==30){
            printf("Not found\n");
        }
    }
}

1038插入排序

#include<stdio.h>
#include<string.h>
int main()
{
    int nCase,i,j,k,temp;
    int n;
    int s[1000];
    scanf("%d",&nCase);
    for(i=0; i<nCase; i++)
    {
        scanf("%d",&n);
        for(j=0; j<n; j++)
        {
            scanf("%d",s+j);
        }
        for(j=0; j<n; j++)
        {
            temp=s[j];
            for(k=j-1; k>=0; k--)
            {
                if(s[k]>temp)
                {
                    s[k+1]=s[k];
                }
                else
                {
                    break;
                }
            }
            s[k+1]=temp;
        }
        for(j=0; j<n; j++)
        {
            printf("%d ",s[j]);
        }
        printf("\n");
    }

}

1042折半查找

#include<stdio.h>
int data[20000];
int binary_search(int d[], int s, int e, int q)
{
    int mid;
    while(s<=e)
    {
        mid=(s+e)/2;
        if(d[mid]==q)
        {
            return mid;
        }
        else if(d[mid]<q){s=mid+1;}
        else{e=mid-1;}
    }
    return -1;
}
int main()
{
    int n,i,m,s,e,q;
    scanf("%d",&n);
    for(i=0; i<n; i++)
    {
        scanf("%d",data+i);
    }
    scanf("%d",&m);
    for(i=0; i<m; i++)
    {
        scanf("%d %d %d",&s,&e,&q);
        if(e>n){e=n;}
        if(s>n-1||s>e-1){printf("-1\n");continue;}
        printf("%d\n",binary_search(data,s,e-1,q));

    }
    return 0;
}

1043矩阵加法

#include<stdio.h>
int main()
{
    int M,N,a[11][11],b[11][11];
    int i,j,flag,num;
    while(scanf("%d",&M)==1&&M!=0&&scanf("%d",&N)==1)
    {
        for(i=1; i<=M; i++)
        {
            for(j=1; j<=N; j++)
            {
                scanf("%d",&a[i][j]);
            }
        }
        for(i=1; i<=M; i++)
        {
            for(j=1; j<=N; j++)
            {
                scanf("%d",&b[i][j]);
            }
        }
        for(i=1; i<=M; i++)
        {
            for(j=1; j<=N; j++)
            {
                a[i][j]+=b[i][j];
            }
        }
        num=0;
        for(i=1; i<=M; i++)
        {
            flag=1;
            for(j=1; j<=N; j++)
            {
                if(a[i][j]!=0)
                {
                    flag=0;
                    break;
                }
            }
            if(flag==1)
            {
                num++;
            }
        }
        for(i=1; i<=N; i++)
        {
            flag=1;
            for(j=1; j<=M; j++)
            {
                if(a[j][i]!=0)
                {
                    flag=0;
                    break;
                }
            }
            if(flag==1)
            {
                num++;
            }
        }
        printf("%d\n",num);
    }
    return 0;
}

1044逗号加法

#include<stdio.h>
int main()
{
    char a[20],b[20];
    long long A,B,temp;
    int i,j;
    while(scanf("%s %s",a,b)==2)
    {
        A=B=0;
        for(i=0; a[i]!='\0'; i++);
        j=-1;temp=1;
        while(--i>=0)
        {
            if(a[i]-'0'>-1&&a[i]-'0'<10)
            {
                j++;temp=10*temp;
                A+=(a[i]-'0')*temp/10;
            }
            if(a[i]==',')continue;
            if(a[i]=='-')A=-A;
        }
        for(i=0; b[i]!='\0'; i++);
        j=-1;temp=1;
        while(--i>=0)
        {
            if(b[i]-'0'>-1&&b[i]-'0'<10)
            {
                j++;temp=10*temp;
                B+=(b[i]-'0')*temp/10;
            }
            if(b[i]==',')continue;
            if(b[i]=='-')B=-B;
        }
        printf("%lld\n",A+B);
    }
    return 0;
}

1046统计字符

#include<stdio.h>
int main()
{
    char a[7],na[7],b[1001];
    int i,j,k;
    while(fgets(a,7,stdin)&&a[0]!='#')
    {
        for(i=0; a[i]!='\0'; i++);
        for(j=0; j<7; j++)
        {
            na[j]=0;
        }
        fgets(b,1000,stdin);
        for(k=0; b[k]!='\0'; k++)
        {
            for(j=0; j<i; j++)
            {
                if(b[k]==a[j])
                {
                    na[j]++;
                }
            }
        }
        for(j=0; j<i-1; j++)
        {
            printf("%c %d\n",a[j],na[j]);
        }
    }
    return 0;
}

1048ZOJ

#include<stdio.h>
int main()
{
    int z,o,j,i;
    z=o=j=0;
    char a[101];
    while(fgets(a,101,stdin)&&a[0]!='E'){
            for(i=0;a[i]!='\0';i++){
                if(a[i]=='Z'){z++;continue;}
        if(a[i]=='O'){o++;continue;}
        if(a[i]=='J'){j++;continue;}
            }
        while(1){
            if(z>0){printf("Z");z--;}
            if(o>0){printf("O");o--;}
            if(j>0){printf("J");j--;}
            if(z==0&&o==0&&j==0){break;}
        }
        printf("\n");z=o=j=0;
    }
    return 0;
}

1049不循环反转数组(递归)

#include<stdio.h>
int a[100];
void reverse(i)
{
    if(i==1){scanf("%d",a+i);printf("%d ",a[i]);}
    else {
        scanf("%d",a+i);reverse(i-1);printf("%d ",a[i]);
    }
}
int main()
{
    int n,i;
    scanf("%d",&n);
    reverse(n);
    return 0;
}

1050百鸡问题

#include<stdio.h>
int main()
{
   int x,y,z,n,i,j,k;
   while(scanf("%d",&n)==1&&n!=EOF){
    for(i=0;i<n/5+1;i++){
        for(j=0;j<(n-5*i)/3+1;j++){
            if(5*i+3*j+(100-i-j+2)/3<n+1){
                printf("x=%d,y=%d,z=%d\n",i,j,100-i-j);
            }
        }
    }
   }
    return 0;
}

1051折半查找'小于'临界点

#include<stdio.h>
int data[20000];
int binary_search(int d[], int s, int e, int q)
{
   int s0=s,e0=e;
   int mid;
   if(d[s]>q-1){return 0;}
   if(d[e]<q){return e0-s0+1;}
   while(1){
    mid=(s+e)/2;
    if(d[mid]<q){
        if(d[mid+1]<q){s=mid+1;}
        else{return mid-s0+1;}
    }
    else if(d[mid]>q){e=mid-1;}
    else{e--;}
   }
}
int main()
{
    int n,i,m,s,e,q;
    scanf("%d",&n);
    for(i=0; i<n; i++)
    {
        scanf("%d",data+i);
    }
    scanf("%d",&m);
    for(i=0; i<m; i++)
    {
        scanf("%d %d %d",&s,&e,&q);
        if(s==n||s==e)
        {
            printf("-1\n");
            continue;
        }
        printf("%d\n",binary_search(data,s,e-1,q));

    }
    return 0;
}

1052全排列

#include<stdio.h>
#include<string.h>
#define N 10
//#define D printf("m=%d\tproduct=%d\tstart=%d\ti=%d\tj=%d\tk=%d\tt=%d\n",m,product,start,i,j,k,t);
//#define M for(start=0;start<len;start++){printf("%d ",index[start]);}printf("\n");
void mySort(char* s)
{
    int len=strlen(s);
    int i,j;
    char temp;
    for(i=0;i<len;i++){
        for(j=i+1;j<len;j++){
            if(s[i]>s[j]){
                temp=s[i];s[i]=s[j];s[j]=temp;
            }
        }
    }
}
int main()
{
    char str[N+1],res[N+1],index[N+1];
    int m,i,j,k,t,product,len;
    int start;
    while(scanf("%s%d",str,&m)==2){
            len=strlen(str);
        mySort(str);
                                                                    //puts(str);
        for(i=0;i<len;i++){index[i]=i;}
        for(i=product=1;i<len+1;i++){
            product*=i;
            if(product>m){break;}
            }
        for(j=0;j<len-i;j++){
            res[j]=str[j];
            index[j]=-1;
        }
            //从后往前数第i个字母前的都是按全排列的第一个排列的顺序排列
                                                // printf("m=%d\tproduct=%d\ti=%d\n",m,product,i);
        while(j<len){
         product/=i;                            //D
         start=m/product;                       //D
         for(t=0;index[t]==-1&&t<len;t++);      //D

         for(k=t;start!=0;k++){
            if(index[k]!=-1){start--;}
            else{continue;}
         }
         while(index[k]==-1){k++;}               //printf("%d***%d***\n",k,index[k]);   D

         res[j]=str[k];
         index[k]=-1;
         m%=product;                              //  D M
         i--;j++;                             // printf("########################\n");
        }
        res[j]='\0';
        puts(res);
    }
    return 0;
}

1053画菱形

#include<stdio.h>
int main()
{
    int n,i,j;
    while(scanf("%d",&n)==1){
        for(i=0 ;i<n+1;i++){
            for(j=0;j<2*n-2*i;j++){printf(" ");}
            for(j=0;j<4*i+1;j++){printf("*");}
            printf("\n");
        }
        for(i=n-1 ;i>-1;i--){
            for(j=0;j<2*n-2*i;j++){printf(" ");}
            for(j=0;j<4*i+1;j++){printf("*");}
            printf("\n");
        }
    }
    return 0;
}

1054冒泡排序交换次数

#include<stdio.h>
int main()
{
    int n,i,j,a[1000],temp,t;
    while(scanf("%d",&n)==1&&n!=0){
        for(i=0 ;i<n;i++){
            scanf("%d",a+i);
        }
        for(i=0,t=0;i<n;i++){
            for(j=i+1;j<n;j++){
                if(a[j]<a[i]){temp=a[j];a[j]=a[i];a[i]=temp;t++;}
            }
        }
        printf("%d\n",t);

    }
    return 0;
}

1055凯撒密码+K

#include<stdio.h>
int main()
{
   char a[100];
   int i,j;
   long k;
   while(scanf("%s",a)==1){
    scanf("%ld",&k);
    for(i=0;a[i]!='\0';i++){
        j=(k+i+1)%26;
        a[i]=(a[i]-'A'+26-j)%26+'A';
    }
    puts(a);
   }
    return 0;
}

1056大数相加

#include<stdio.h>
#define N 1000+2
int main()
{
    int n,i,j,k,m,len1,len2,jinwei;
    char a[N],b[N],c[N];
    scanf("%d",&n);
    for(m=0;m<n;m++){
        scanf("%s%s",a,b);
        //向右对齐,左边补零
        for(j=0;a[j]!='\0';a[j]-='0',j++);
        for(len1=j+1;j>-1;a[j+N-len1]=a[j],j--);
        for(j=N-1-len1;j>-1;a[j]=0,j--);

        for(k=0;b[k]!='\0';b[k]-='0',k++);
        for(len2=k+1;k>-1;b[k+N-len2]=b[k],k--);
        for(k=N-1-len2;k>-1;b[k]=0,k--);
//相加
        jinwei=0;
        for(i=N-2;i>-1;i--){
            c[i]=(a[i]+b[i]+jinwei)%10;
            jinwei=(a[i]+b[i]+jinwei)/10;
        }
//输出
        for(i=0;c[i]==0&&i<N-1;i++);
        if(i==N-1){printf("0\n");continue;}//考虑输入为(0,0)的情况
        for(;i<N-1;i++){printf("%d",c[i]);}
        printf("\n");
    }
    return 0;
}

1057二分法解方程浮点

#include<stdio.h>
#include<math.h>
#define func(x) 2*x*x*x-4*x*x+3*x-6
int main()
{
    int i,flag;
    double y,x,hi,lo;
    while(scanf("%lf",&y)==1)
    {
        flag=0;
        hi=10000;
        lo=-10000;
        if(func(lo)-y>0||func(hi)-y<0)
        {
            printf("NULL\n");continue;
        }
        while(!(fabs(lo-hi)<0.000001))
        {
            x=(hi+lo)/2.0;
            if(func(x)-y>0)
            {
                hi=x;
            }
            else if(func(x)-y<0)
            {
                lo=x;
            }
        }
        printf("%.4lf\n",x);
    }
    return 0;
}

1058小试指针

#include<stdio.h>
int main()
{
    int arr[10]={1,3,5,7,9,11,13,15,17,19};
    int *pt=arr;
  // int *a,*b,*c,*d;
    //a=b=c=d=arr;
    printf("%p\n%p\n%p\n%d\n",&arr[0],&pt,pt,*pt);
    printf("%d\n",*pt+3);
    printf("%d\n",pt[3]);
    printf("%p\n",&*pt);
    printf("%p\n",*&pt);
    //printf("%d\n",*pt[3]);
    printf("%d\n",*(pt+3));
    printf("%d\n",*pt++);
    printf("%d\n",*(pt++));
    printf("%d\n",(*pt)++);
    printf("%d\n",++(*pt));
    return 0;
}

1060转置矩阵

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int m,n,i,j;
    int *p;
    while(scanf("%d%d",&m,&n)==2){
        p=(int*)malloc(sizeof(int)*m*n);
        for(i=0;i<m;i++){
            for(j=0;j<n;j++){
                scanf("%d",p+i*n+j);
            }
        }
        for(i=0;i<n;i++){
            for(j=0;j<m;j++){
                printf("%d ",*(p+j*n+i));
            }
            printf("\n");
        }
        free(p);
    }
}

1061成绩查询

#include<stdio.h>
#include<math.h>
#define N 10
struct student
{
    int id;
    int score;
};
void findmax(struct student *stu, int *score, int *index)
{
    int i;
    *score=(*stu).score;
    *index=0;
    for(i=0; i<N; i++)
    {
        if(*score<(*(stu+i)).score)
        {
            *score=(*(stu+i)).score;
            *index=i;
        }
    }
}
void findmin(struct student *stu, int *score, int *index)
{
    int i;
    *score=(*stu).score;
    *index=0;
    for(i=0; i<N; i++)
    {
        if(*score>(*(stu+i)).score)
        {
            *score=(*(stu+i)).score;
            *index=i;
        }
    }
}
void findaver(struct student *stu, int *score, int *index)
{
    int sum,i;
    int delta,delta_min;
    for(i=sum=0; i<N; i++)
    {
        sum+=(*(stu+i)).score;
    }
    *score=(*stu).score;
    *index=0;
    delta_min=fabs((*stu).score*N-sum);
    for(i=0; i<N; i++)
    {
        delta=fabs((*(stu+i)).score*N-sum);
        if(delta<delta_min)
        {
            delta_min=delta;
            *score=(*(stu+i)).score;
            *index=i;
        }
    }
}
int main()
{
    struct student *stu=(struct student*)malloc(sizeof(struct student)*N);
    int i;
    int score,index;
    for(i=0; i<N; i++)
    {
        scanf("%d %d",&((*(stu+i)).id),&((*(stu+i)).score));
    }
    findmax(stu,&score,&index);
    printf("%d %d\n",(*(stu+index)).id,score);
    findmin(stu,&score,&index);
    printf("%d %d\n",(*(stu+index)).id,score);
    findaver(stu,&score,&index);
    printf("%d %d\n",(*(stu+index)).id,score);
    free(stu);
    return 0;
}

1063查找子字符串

#include<stdio.h>
#include<stdlib.h>
char *findstr(char *s, char *t)
{
    int i,j,flag;
    for(i=0; *(s+i)!='\0'; i++)
    {
        if(*(s+i)==*t)
        {
            flag=1;
            for(j=1; *(t+j)!='\0'; j++)
            {
                if(*(s+i+j)!=*(t+j))
                {
                    flag=0;
                    break;
                }
            }
            if(flag==1)
            {
                return s+i;
            }
        }
    }
    return NULL;
}
int main()
{
    char *s=(char*)malloc(sizeof(char)*1001);
    char *t=(char*)malloc(sizeof(char)*1001);
    while(scanf("%s%s",s,t)==2)
    {
        printf("%p %p\n",s,findstr(s,t));
    }
    return 0;
}

1064队列操作

#include<stdio.h>
#include<stdlib.h>
//#define D printf("front=%d\trear=%d\n",front,rear);
typedef int datatype;
int main()
{
    int n,m,op,id,front,rear;
    while(scanf("%d%d",&n,&m)==2){
            n++;
            datatype* a=(datatype*)malloc(sizeof(datatype)*(n));
            front=rear=0;
        while(m--){
            scanf("%d%d",&op,&id);
            if(1==op){
                if((rear+1)%n!=front){
                    a[rear]=id;
                    rear=(rear+1)%n;
                }                                         //  D
            }
            else if(2==op){
                if(rear!=front){
                    front=(front+1)%n;
                }                                          // D
            }else {continue;}
        }
        if(front==rear){printf("NULL\n");continue;}
       while(front!=rear){
        printf("%d ",a[front]);
        front=(front+1)%n;
       }printf("\n");
    }
    return 0;
}

1065栈操作

#include<stdio.h>
#include<stdlib.h>
int *a;
int top;
int push(int vol,int id)
{
    if(top>vol-2)
    {
        return 1;
    }
    else
    {
        a[++top]=id;
        return 0;
    }
}
int pop(int vol)
{
    if(top==-1)
    {
        return 1;
    }
    else
    {
        top--;
        return 0;
    }
}
//int debug()
//{
//    int i=top;
//    printf("top=%d\t",top);
//    while(i>-1){
//        printf("%d ",a[i--]);
//    }
//    printf("\n");
//    return 0;
//}
int main()
{
    int n,m,op,id,i;
    while(scanf("%d%d",&n,&m)==2)
    {
        a=(int*)malloc(sizeof(int)*n);
        top=-1;
        while(m-->0)
        {
            scanf("%d%d",&op,&id);
            if(op==1)
            {
                push(n,id);
                //debug();
            }
            else if(op==2)
            {
                pop(n);
                //debug();
            }
            else
            {
                continue;
            }
        }
        if(top==-1){printf("NULL");}
        while(top>-1)
        {
            printf("%d ",a[top--]);
        }
        printf("\n");
        free(a);
    }
    return 0;
}

1066判断点是否在圆上

#include<stdio.h>
#include<stdlib.h>
typedef struct
{
    double x;
    double y;
}POINT;
typedef struct
{
    double m;
    double n;
    double r;
}CIRCLE;
int in_circle(POINT p, CIRCLE c)
{
    double temp1=(p.x-c.m)*(p.x-c.m)+(p.y-c.n)*(p.y-c.n);
    double temp2=c.r*c.r;
   if(temp1-temp2>0){return 0;}
   else if(temp1-temp2<0){return 2;}
    else {return 1;}
}
int main()
{
    POINT p;
    CIRCLE c;
    while(scanf("%lf%lf%lf%lf%lf",&p.x,&p.y,&c.m,&c.n,&c.r)==5)
    {
        printf("%d\n",in_circle(p,c));
    }
    return 0;
}

1067字节输出

#include<stdio.h>
union my_union
{
    int a;
    unsigned char b[sizeof(int)];
};
int main()
{
    int i;
    union my_union test;
    while(scanf("%d",&test.a)==1){
        for(i=0;i<sizeof(int);i++){
            printf("%.2X",test.b[i]);
        }printf("\n");
    }
    return 0;
}

1068链表基本操作

#include<stdio.h>
#include<stdlib.h>
typedef struct NODE
{
    int val;
    struct NODE* next;
} node;
node *head;
int addNode(idx,val)
{
    node *p=head;
    node*q;
    int i=0;
    while(i!=idx&&p!=NULL)
    {
        p=p->next;
        i++;
    }
    if(p==NULL)
    {
        return 0;
    }
    q=(node*)malloc(sizeof(node));
    q->val=val;
    if(p->next==NULL)
    {
        p->next=q;
        q->next=NULL;
    }
    else
    {
        q->next=p->next;
        p->next=q;
    }
    return 0;
}
int editNode(idx,val)
{
    node* p=head;
    int i=0;
    while(i!=idx&&p!=NULL)
    {
        p=p->next;
        i++;
    }
    if(p==NULL)
    {
        return 0;
    }
    p->val=val;
    return 0;
}
int delNode(idx)
{
    node* p=head;
    node*q;
    int i=0;
    while(i!=idx&&p!=NULL)
    {
        q=p;
        p=p->next;
        i++;
    }
    if(p==NULL)
    {
        return 0;
    }
    q->next=p->next;
    free(p);
    return 0;
}
int appearNode(int idx)
{
    node* p=head;
    int i=0;
    while(i!=idx&&p!=NULL)
    {
        p=p->next;
        i++;
    }
    if(p==NULL)
    {
        return 0;
    }
    printf("%d\n",p->val);
    return 0;
}
//int debug()
//{
//    node* p=head;
//    while(p!=NULL){
//        printf("%d->",p->val);p=p->next;
//    }printf("\n");
//    return 0;
//}
int main()
{
    int op,idx,val;
    head=(node*)malloc(sizeof(node));
    head->next=NULL;
    head->val=111;
    while(scanf("%d%d%d",&op,&idx,&val)==3)
    {
        if(op!=1&&op!=2&&op!=3&&op!=4)
        {
            continue;
        }
        else if(op==1)
        {
            addNode(idx,val);
            //debug();
        }
        else if(op==2)
        {
            editNode(idx,val);
            //debug();
        }
        else if(op==3)
        {
            delNode(idx);
            //debug();
        }
        else
        {
            appearNode(idx);
        }
    }
    return 0;
}

1069浮点精确数

#include<stdio.h>
#include<math.h>
int main()
{
    int p;
    double a,b,delta;
    while(scanf("%d%lf%lf",&p,&a,&b)==3)
    {
        delta=1.0;
        while(p-->0){delta/=10;}
        if(fabs(a-b)<delta){printf("0\n");}
        else if(a-b<0){printf("-1\n");}
        else{printf("1\n");}
    }
    return 0;
}

1070三角形归类

#include<stdio.h>
#include<math.h>
void my_sort(int *a,int *b,int *c)
{
  int temp;
  if(*a>*b){temp=*a;*a=*b;*b=temp;}
    if(*a>*c){temp=*a;*a=*c;*c=temp;}
      if(*b>*c){temp=*b;*b=*c;*c=temp;}
}
int is_triangle(int a,int b,int c)
{
    if(a+b>c){return 1;}
    else{
        printf("not a triangle");return 0;
    }
}
void choose_angle(int a,int b,int c)
{
    if(c*c-a*a-b*b>0){printf("obtuse ");}
    else if(c*c-a*a-b*b==0){printf("right ");}
    else{printf("acute ");}
}
void choose_edge(int a,int b,int c)
{
    if(a!=b&&b!=c){printf("scalene");return;}
    if(a==b&&b==c){printf("equilateral");return;}
    if(a==b||b==c){printf("isosceles");return;}
}
int main()
{
    int a,b,c;
    while(scanf("%d%d%d",&a,&b,&c)==3){
        my_sort(&a,&b,&c);//按非递减排序
        if(is_triangle(a,b,c)){//判断是否构成三角形
        choose_angle(a,b,c);//按最大角类型分类
        choose_edge(a,b,c);//按照边长类型分类
        }
    printf("\n");
    }
    return 0;
}

1071字符串串烧

#include<stdio.h>
#define N 210
void getnchar(char *str, int n)
{
    int i;
    for(i=0; i<n-1;)
    {
        str[i]=getchar();
        if(str[i]=='\n')
        {
            break;
        }
        i++;
    }
    str[i]='\0';
}
int my_strlen(char *str)
{
    int len=0;
    while(str[len]!='\0')
    {
        len++;
    }
    return len;
}
int my_strncat(char *dest, char *src, int n)
{
    int i=my_strlen(dest),j=my_strlen(src),k;
    for(k=0; k<j&&k<n; k++)
    {
        dest[i+k]=src[k];
    }
    dest[i+k]='\0';
    return k;
}
int my_strspn(char *str, char *keys)
{
    int i=0,j;
    while(str[i]!='\0')
    {
        j=0;
        while(keys[j]!='\0')
        {
            if(keys[j]==str[i])
            {
                break;
            }
            j++;
        }
        if(keys[j]=='\0')
        {
            break;
        }
        i++;
    }
    return i;
}
int main()
{
    int nCase,x;
    char a[N],b[N],c[N];
    scanf("%d",&nCase);
    getchar();
    while(nCase--)
    {
        getnchar(a,N);
        getnchar(b,N);
        getnchar(c,N);
        scanf("%d",&x);
        getchar();
        printf("%d\n",my_strlen(a));
        printf("%d %s\n",my_strncat(a,b,x),a);
        printf("%d\n",my_strspn(b,c));
    }
    return 0;
}

1072石敢腐

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 110
#define D debug();
#define E debug1();
void get_space()//取走所有空白字符
{
    char temp;
    while(1)
    {
        temp=getchar();
        if(temp==' '||temp=='\t'||temp=='\n')
        {
            continue;
        }
        else
        {
            ungetc(temp,stdin);
            break;
        }
    }
}
void debug()
{
    printf("I am here\n");
}
void debug1()
{
    printf("#\n");
}
int shiganfu(const char *format, void *ptr)
{
    char *a,b;
    int temp,i,j,k;
    if(strcmp(format,"%d")==0)
    {
        get_space();
        b=getchar();
        if(b==EOF)
        {
            return EOF;
        }

        if(b<'0'||b>'9')
        {
            ungetc(b,stdin);
            return 0;
        }
        ungetc(b,stdin);
        i=temp=0;
        a=(char *)ptr;
        while(1)
        {
            a[i]=getchar();
            if(a[i]<'0'||a[i]>'9')
            {
                if(a[i]!=EOF)
                {
                    ungetc(a[i],stdin);
                }
                for(j=1,i--; i>-1; i--)
                {
                    temp=temp+j*(a[i]-'0');
                    j*=10;
                }
                *(int *)ptr=temp;
                return 1;
            }
            i++;
        }
    }
    else if(strcmp(format,"%c")==0)
    {
        getchar();
        b=getchar();
        if(b==EOF)
        {
            return EOF;
        }
        else
        {
            *(char*)ptr=b;
            return 1;
        }
    }
    else if(strcmp(format,"%s")==0)
    {
        get_space();
        b=getchar();
        if((b)==EOF)
        {
            return -1;
        }
        ungetc(b,stdin);


        a=(char *)ptr;
        i=0;
        while(1)
        {
            a[i]=getchar();
            if(a[i]==' '||a[i]=='\t'||a[i]=='\n')
            {
                ungetc(a[i],stdin);
                a[i]='\0';
                return 1;
            }
            if(a[i]==EOF)
            {
                a[i]='\0';
                return 1;
            }
            i++;
        }
    }
    else if(strcmp(format,"\\n")==0)
    {
        while(1)
        {
            b=getchar();
            if(b==' '||b=='\t'||b=='\n')
            {
                continue;
            }
            else  if(b==EOF)
            {
                return 0;
            }
            else
            {
                ungetc(b,stdin);
                return 0;
            }
        }
    }
    else
    {
        return -3;
    }
}
int main()
{
//    char s,t,r;while(1){
//    s=getchar();printf("%c**HAHA!1\n",s);
//    t=getchar();printf("%c**HAHA!2\n",t);
//    r=getchar();printf("%d**HAHA!3\n",r);
//    if(s==EOF){printf("%d**HAHA!4\n",s);}
//               getchar(); printf("HAHA5!\n");}
//
////测试ctrl+z的问题

    void *ptr=malloc(sizeof(char)*N);
    char format[10];
    int i,ret;
    while(1)
    {
        get_space();

//        i=0;
//        while(1)
//        {
//            format[i]=getchar();
//            if(format[i]==' '||i==2)
//            {
//                format[i]='\0';
//                break;
//            }
//            else
//            {
//                i++;
//            }
//        }
        // //puts(format);
        format[0]=getchar();
        if(format[0]==EOF)
        {
            break;
        }
        else
        {
            format[1]=getchar();
            format[2]='\0';
            ret=-10;
            ret=shiganfu(format,ptr);

            printf("%d",ret);
            if(ret==1)
            {
                if(strcmp(format,"%s")==0)
                {
                    printf(" %s",(char*)ptr);
                }
                else if(strcmp(format,"%d")==0)
                {
                    printf(" %d",*(int*)ptr);
                }
                else if(strcmp(format,"%c")==0)
                {
                    printf(" %c",*(char*)ptr);
                }
                else ;
            }
            printf("\n");

        }
    }
    free(ptr);
    return 0;
}

1073合并有序数组

#include<stdio.h>
#define N 1000000
int main()
{
    int n;
    long long s,t,i,j;
    int a[N];
    int b[N];
    for(i=0;i<N;i++){a[i]=b[i]=0;}
    scanf("%d",&n);
    while(n-->0){
        scanf("%lld",&s);
        for(i=0;i<s&&i<N;i++){scanf("%d",&a[i]);
        //printf("s=%lld\ti=%lld\ta[%lld]=%d\n",s,i,i,a[i]);
        }
        scanf("%lld",&t);
        for(i=0;i<t&&i<N;i++){scanf("%d",&b[i]);
        //printf("t=%lld\ti=%lld\tb[%lld]=%d\n",t,i,i,b[i]);
        }
        for(i=0,j=0;i<s&&j<t;){
            if(a[i]<b[j]||a[i]==b[j]){
                printf("%d ",a[i]);
                if(a[i]==b[j]){j++;}
                i++;
            }
            else{
                while(a[i]>b[j]&&j<t&&i<s){
                    printf("%d ",b[j]);
                    j++;
                }
            }
        }
        if(i>s-1){
            while(j<t){printf("%d ",b[j]);j++;}
        }
        if(j>t-1){
            while(i<s){printf("%d ",a[i]);i++;}
        }
        if(i>s-1&&j>t-1){printf("\n");}
    }
    return 0;
}

完美字符串

#include<stdio.h>
int main(){
    char s[10001];
    int times[26]={0};
    int timesTemp;
    long ans=0;
    int count=0,count1;
    gets(s);
    while(s[count]!='\0'){
        times[(s[count]-'A')%32]++;
        count ++;
    }
    for(count=0;count<26;count++){
        for(count1=count+1;count1<26;count1++){
            if(times[count]<times[count1]){
                timesTemp=times[count];times[count]=times[count1];times[count1]=timesTemp;
            }
        }
    }
    timesTemp=26;
    for(count=0;count<26;count++){
        ans=ans+timesTemp*times[count];
         timesTemp--;
    }
    printf("%ld",ans);
}