算法竞赛入门经典(第二版)第三章课后习题(1-4)未完待续

习题3-1 得分

#include<stdio.h>

int main(){

    int score=0;

    char c;

    int count=0;

    while ((c=getchar())!=EOF) {

        if (c=='X') {

            count=0;

        }

        elseif(c=='O'){

            count++;

            score+=count;

        }

    }

    printf("%d\n",score);

    return0;

}


习题3-2 分子量

#include<stdio.h>

#include<string.h>

#define  MAXN 10

int count[MAXN];

char s[MAXN];

int main(){

    memset(count,0,sizeof(count));

    scanf("%s",s);

    int i=0;

    while (s[i]!='\0') {

        if ((s[i+1]>='C'&&s[i+1]<='O')||s[i+1]=='\0') {

            switch (s[i]) {

                case'C':

                    count[0]++;

                    break;

                case'H':

                    count[1]++;

                    break;

                case'N':

                    count[2]++;

                    break;

                default:

                    count[3]++;

                    break;

            }

            i+=1;

        }

        else{

            switch (s[i]) {

                case'C':

                    count[0]+=s[i+1]-'0';

                    break;

                case'H':

                    count[1]+=s[i+1]-'0';

                    break;

                case'N':

                    count[2]+=s[i+1]-'0';

                    break;

                default:

                    count[3]+=s[i+1]-'0';

                    break;

            }

            i=i+2;

        }

    }

    float total=12.01*count[0]+1.008*count[1]+14.01*count[2]+16.00*count[3];

    printf("%.3f\n",total);

    return0;

}


习题3-3 数数字

#include<stdio.h>

#include<string.h>

#define  MAXN 10

int count[MAXN];

char s[10010];

int main(){

    memset(count,0,sizeof(count));

    scanf("%s",s);

    int i=0;

    while (s[i]!='\0') {

        count[s[i]-'0']++;

        i++;

    }

    for (i=0; i<9; i++) {

        printf("%d ",count[i]);

    }

    printf("%d\n",count[9]);

    return0;

}


习题3-4 周期串

#include<stdio.h>

#include<string.h>

char s[100];

int main(){

    scanf("%s",s);

    long len=strlen(s);

    int flag=1;

    for (long i=1; i<=len; i++) {//周期

        flag=1;

        for (long j=0; j<i; j++) {

            int n=1;

            while (j+i*n<len) {

                if (s[i*n+j]==s[j]) {

                    n++;

                }

                else{

                    flag=0;

                    j=len;//退出条件

                }

            }

        }

        if (flag) {

            printf("%ld\n",i);

            break;

        }

    }

    return 0;

}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值