楚寻欢 2021-11-18 14:18 采纳率: 33.3%
浏览 33

样例都过了但是还是提交错,实在看不到哪里有缺陷,请问应该在哪里改进?

某天ly正在707学习,突然听到楼下yyt在大声的叫:"sgly(以下再重复三句)",聪明的ly稍加思索便意识到了这是在叫他,但是ly却很生气,并且删除了

yyt的好友。

对此xiayufengchen感到非常不解,但是他也不敢多问。随后ly说出了自己生气的原因:“他叫了四次sgly,他是在骂我傻瓜ly!!”

,听到这里,xiayufengchen明白过来了,

原来ly是个”素数迷“,痴迷于所有的素数,就连别人叫他名字的次数也一定要是素数,这样ly就会认为这是在夸他。”
?谁听到自己被骂傻瓜会开心呢?“。

想到这里,xiayufengchen也生气的删掉了yyt的好友,但是一年一度的招新时间到了,找sgly的人多了起来,xiayufengchen想要快速的判断出,别人叫sgly的次

数是不是素数,你能帮他吗?
输入格式

输入包含一个整数n表示某个人大声喊出的字数 下一行包含一个含有n个字符的字符串,表示某人大声喊出的话
输出格式

如果叫sgly的次数为素数的话,会使ly感到开心,请输出”happy“(不加双引号) 如果叫sgly的次数不是素数的话,会使ly感到生气,请输出”angry“(不加双引号)
样例
样例输入

12
sglyabcdsgly

样例输出
happy

数据范围与提示

4<=N<=1000;(保证n一定是4的倍数) 某人喊出的话不一定只有sgly,可能会是这样:”sglyabcdsgly“。
以下是我写的答案:

#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
char a[1005];
int main() {
    int n,count=0,flag;
    scanf("%d",&n);
    for(int i=0; i<n+1; i++) {
        scanf("%c",&a[i]);
    }
    for(int i=0; i<n+1; i++) {
        if(a[i]=='s'&&a[i+1]=='g'&&a[i+2]=='l'&&a[i+3]=='y') {
            count++;
        }
    }
    if(count==0||count==1) {
        flag=0;
    } else if(count==2) {
        flag=1;

    } else {
        for(int i=2; i<count; i++) {
            if(count%i==0) {
                flag=0;
                break;
            } else {
                flag=1;
            }
        }
    }
    if(flag==1) {
        printf("happy\n");
    } else if(flag==0) {
        printf("angry\n");
    }
    return 0;
}

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2021-11-18 16:31
    关注

    修改如下,供参考:

    #include<stdio.h>
    #include<string.h>
    //#include<bits/stdc++.h>
    using namespace std;
    char a[1005];
    int main() {
        int i, n, len, count = 0, flag = 1;
        scanf("%d", &n);
        scanf("%s", a);
        len = strlen(a);
        if (len == n) {
            for (i = 0; i <= n - 4; i++) {   //for (int i = 0; i < n + 1; i++)
                if (a[i] == 's' && a[i + 1] == 'g' && a[i + 2] == 'l' && a[i + 3] == 'y') {
                    count++;
                    i += 3;
                }
            }
            if (count <= 1) {
                flag = 0;
            }
            else if (count == 2) {
                flag = 1;
            }
            else {
                for (int i = 2; i < count; i++) {
                    if (count % i == 0) {
                        flag = 0;
                        break;
                    }
                }
            }
            if (flag == 1) {
                printf("happy\n");
            }
            else if (flag == 0) {
                printf("angry\n");
            }
        }
        else
            printf("input error.\n");
        return 0;
    }
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 11月18日

悬赏问题

  • ¥15 wpf datagrid如何实现多层表头
  • ¥15 为啥画版图在Run DRC会出现Connect Error?可我Calibre的hostname和计算机的hostname已经设置成一样的了。
  • ¥20 网站后台使用极速模式非常的卡
  • ¥20 Keil uVision5创建project没反应
  • ¥15 mmseqs内存报错
  • ¥15 vika文档如何与obsidian同步
  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置
  • ¥15 sentaurus lithography
  • ¥15 关于#linux#的问题:子进程1等待子进程A、B退出后退出(语言-c语言)