strlen在哪个头文件中_刷题中...10.24

我看似是在学C语言,其实是在学英语...

0da48a6f8377feedd0fd444556ff3a96.png

题目的大概意思可能是说:进行多次测试,每次测试具有多个问题,每个问题的做题结果包括“O”正确,“X”错误。题目会在第一行输入一个数字N,表示测试的次数,下面将有N行的测试结果。我们需要根据测试结果进行打分。其规则为:当出现“O”的时候进行加分,当这个“O”为连续“O”序列的第x个时,加x分。也就是说“OOO”中,第一个O加1分,第2个加2分,第三个加3分。(书上给的OJ网站,怪偏僻的...提交结果竟然是邮箱反馈???)

我个人的思路是:先创建int count 用来储存测试的次数,然后进行count次循环。每次循环当中,声明int goal并初始化0,用来统计分数,int lian = 0用来储存“连杀数”。声明char alp[50](觉得应该够长了),用来储存测试结果。并利用strlen()函数来获取alp字符串的长度(记得添加头文件string.h),并赋值到int类型len当中。然后循环依次判断每一个字符,如果是O,就把连杀数先+1,然后分数就加上连杀数的值,若不是O,就把连杀数归0。循环判断完之后就输出分数。然后进行下一次测试的计算。。。如图:

c3cc5cd46629e020c06ca3978d890e60.png

然后...还有12道例题要做...

无论一个题目多么的简单,只要它是用英文描述的,我第一眼都会感觉非常难。比如:

597e630f7f64989adf578c761d5c0605.png

58e04bd9db4c504d7875c4f99b1be218.png

根据书上的题目概述,就是要我们求分子量啦...给你N个分子式,分别求出N个分子量。且每个分子式最多包含4种原子,原子量也给我们了...我原以为这本是道送分题,直到我看到了输入示例...哎呀,分子式还有数字下标呢,咋办啊...又懵了...

我想,对于每个分子式,都应该记录对应的4种原子出现的个数,最后四则运算。所以我需要对分子式进行判断,扫描到一个字符时如果有下标,那么个数就加上下标的值,没下标就加1,可是问题又来了。扫描到的内容代表一个原子,那后面还要扫描字符并判断是否为下标...而且这下标的值可能还不是个位数,挺烦人的...

我最后采用了一个省脑子,但是非常非常非常笨的方法来解决这道题因此这代码也很长...我就不展示了免得丢人现眼,没啥价值。有多长呢?

不过好歹是通过了,如果我理解没错的话??

bb9b6a43c7f8b401145f8e5f7675b9a9.png

这是通过了吧?还有11道例题...

a95dd641356207a477432a2278115acd.png

这个题目的意思就是说,当把前N个正整数连在一起时,我们要求出0~9分别出现的总次数。这样的操作要分析K次,这个K会在第一行输入,下面K行每行代表一个N...

乍一看感觉挺麻烦,连起来的数可能很长,其实很简单。不管它的这N个正整数是否连在一起,我们都能够得到它各个位的值(它的大小限制在10000以内)。因此我们对于每次操作,只要进行N次的循环就行了。用一个数组ci[10](初始化值为0)来统计各个数字出现的次数。每次从1到N的每次循环中我们都可以很轻易的得到各个位的值,对应下标的数组自增就行了,当然,不要忘记判断数的位数,不然尝试取出12的百位值时你可能会得到0,这就冤枉0了...

以下是我的代码:

c1f9c03cc066d45d44ea60d6348e1fa8.png

然后...下一题...

e1ef7b70a80e71c332fd179c37119eb1.png

题目就一句话:分别求出N个周期字符串的最小周期。我提交了两次,都WA了。不知道为啥。第一次因为输出忘记换行,第二次我真不知道哪里有问题。不想写了,我还有其他事要处理呢....代码发出来一下,要是有发现问题所在的小伙伴可以回复我,我能看见的。

#include

#include

int main(void){

    int count;

    scanf("%d", &count);

    while(count--){

        char alp[90];

        scanf("%s", alp);

        int len = strlen(alp);

        int yin[20];

        memset(yin, 0, sizeof(yin));

        int k = 1;

        for (; k <= len;k++){

            if(len%k==0)

                yin[k]++;

        }

        for (k = 1; k <= len;k++){

            if(yin[k]==1){

                char alp1[90];

                char alp2[90];

                int ci = k;

                while(ci--){

                    alp1[ci] = alp[ci];

                    alp2[ci] = alp[ci];

                }

                alp1[k] = 0;

                alp2[k] = 0;

                ci = len / k - 1;

                while(ci--){

                    strcat(alp1, alp2);

                }

                if(strcmp(alp,alp1)==0){

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

                    break;

                }

            }

        }

    }

}

————分割线————

溜了溜了...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值