为了账号安全,请及时绑定邮箱和手机立即绑定

for循环跳转问题的解决(for while循环语句中不能用goto吧?),满足执行A,否则跳过A,怎么办?

for循环跳转问题的解决(for while循环语句中不能用goto吧?),满足执行A,否则跳过A,怎么办?

C
慕斯卡9202087 2016-11-03 13:09:49
如题for(.....){    A    if(满足条件)    执行B    else    跳过B}{    B}B不能和A一起循环还是贴代码吧,一个我发现bug(2^n 3^n 5^n没解决这个不用管了,这代码时间复杂度太高,我知道丑数的正解了)的丑数解决。#include <stdio.h>int main(){    int n,m,i, j, k,l,max,array[100];    l = 0;    scanf_s("%d%d", &n, &m);    for (i = n; i <= m; i++)    {        k = 0;//限制输出NO条件        for (j = 4; j <= i / 2; j++)//j=1不考虑,2,3跳过了        {            if (j == 2 || j == 3 || j == 5)                continue;            if (i%j == 0)                break;        }//问题在此,怎么让for循环后在i%j==0时结束掉后面自if(i%2=0...)至for(i=n...)前的代码?        if (i % 2 == 0 || i % 3 == 0 || i % 5 == 0)        {            array[l] = i;            l++;            k = 1;        }                    }    for (i = n; i <= m; i++)    {        if (array[i + 1] > array[i])            max = array[i + 1];//选择最大丑数    }    if (k == 1)    {        printf("%d", max);    }    if (k == 0)        printf("%d %d NO", n, m);    return 0;}
查看完整描述

1 回答

?
慕斯卡9202087

TA贡献2条经验 获得超0个赞


#include <stdio.h>
int main()
{
    int n,m,i,j,k,max,number,array[1000];
    j = 0;
    scanf_s("%d%d", &n, &m);
    i = n;
    if (m == n)
    {
    
            number = i;
            while (number % 2 == 0)
                number /= 2;
            while (number % 3 == 0)
                number /= 3;
            while (number % 5 == 0)
                number /= 5;
            if (number == 1)
            {
                printf("%d", n);
                return 0;
            }
            else
            {
                printf("%d %dNO", n, m);
                return 0;
            }
    }
    else
    {
        for (i = n; i <= m; i++)
        {
            number = i;
            while (number % 2 == 0)
                number /= 2;
            while (number % 3 == 0)
                number /= 3;
            while (number % 5 == 0)
                number /= 5;
            if (number == 1)
            {
                array[j] = i;
                j++;
                k = j;
            }
            else
                number = 0;
        }
    }
    if (number == 1)
    {
        for (i = n; i <= m; i++)
        {
            for (j = 0; j < k; j++)
                if (array[j + 1] > array[j])
                    max = array[j + 1];//最大丑数
        }
        printf("%d", max);
    }
    if (number == 0)
        printf("%d %dNO", n, m);
    return 0;

}除了可能的溢出问题,以及时间复杂度等考虑,算是勉强解决了这一问题吧(我还小,嘿嘿)。。。。

查看完整回答
反对 回复 2016-11-03
?
慕斯卡9202087

TA贡献2条经验 获得超0个赞

#include <stdio.h>
int main()
{
    int n,m,i,j,k,max,number,array[1000];
    j = 0;
    scanf_s("%d%d", &n, &m);
    for (i = n; i <= m; i++)
    {
        number = i;
        while (number % 2 == 0)
            number /= 2;
        while (number % 3 == 0)
            number /= 3;
        while (number % 5 == 0)
            number /= 5;
        if (number == 1)
        {
            array[j] = i;
            j++;
            k = j;
        }
    }
    for (i = n; i <= m; i++)
    {
        for(j=0;j<k;j++)
        if (array[j + 1] > array[j])
            max = array[j + 1];
    }
    printf("%d", max);
    return 0;

}评论改的代码格式。。。。[n,m]范围内最大丑数求解代码,应该没问题,目前在想如何加上无丑数输出no的情况


用的number代替i来给丑数输入数组,但是如何改变number或者再添加一个变量使得number(number=0或者A=number时A=0使得printf(“%d”,max)跳过,而输出printf(“no”)

查看完整回答
反对 回复 2016-11-03
?
kekedeaizhiyu

TA贡献1条经验 获得超0个赞

不知道

查看完整回答
反对 回复 2016-11-03
  • 1 回答
  • 0 关注
  • 1656 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信