鱼C论坛

 找回密码
 立即注册
查看: 2846|回复: 53

打印问题

[复制链接]
发表于 2023-5-11 19:05:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>

int main(){
        printf("测试个数");
        int n,m,t;
        scanf("%d",&t);
        for(int i=1;i<=t;i++){
       
                scanf("%d",&n);
                scanf("%d",&m);
                if(n<m){
                        printf("no");
                        continue;
                }
                if(n==1){
                   printf("yes");
                        continue;
                }
                while(n%3==0&&n!=1){     //如果n=27,为什么下面还会打印no
                        n=n/3;
                        if(n==m){
                        printf("yes");break;
                        }else if(n*2==m){
                        printf("yes");break;       
                        }           
                }if(n!=m){
                  printf("no");
                }
                       
                }
       
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-11 19:06:30 | 显示全部楼层
本帖最后由 sfqxx 于 2023-5-11 19:12 编辑

当 n=27时,对于第一个while循环执行了三次,n分别变成9、3和1。在第三次迭代后,n=1,但程序还会继续执行while循环而不是跳出循环进行if判断,因为没有在条件中添加n>1的判断。因此,虽然n=1,但仍会继续执行下一次循环,最后导致输出no。

要解决这个问题,需要在while循环中添加一个条件,判断n是否大于1,如果n=1,则跳出循环并进行if判断。修改后的代码如下:
#include<stdio.h>

int main(){
    printf("测试个数");
    int n,m,t;
    scanf("%d",&t);
    for(int i=1;i<=t;i++){
        scanf("%d",&n);
        scanf("%d",&m);
        if(n<m){
            printf("no");
            continue;
        }
        if(n==1){
            printf("yes");
            continue;
        }
        while(n%3==0&&n>1){
            n=n/3;
            if(n==m){
                printf("yes");
                break;
            }else if(n*2==m){
                printf("yes");
                break;       
            }
        }
        if(n!=m){
            printf("no");
        }
    }
    return 0;
}
有用请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-11 19:06:35 | 显示全部楼层
这段代码主要是判断一个数能否通过以下两个操作变成另一个数:

1.将该数除以3(当该数为3的倍数时才能进行此操作);

2.将该数乘以2。

现在的问题是,当n=27时,为什么下面还会打印no。

原因是,在第一个if语句中,当n<m时,会直接输出no并跳过本次循环,但当n=27时,第一个if语句不成立,会继续执行后面的代码。在while循环中,n会被除以3,变成9,然后再次被除以3变成3,最后再次被除以3变成1,此时while循环结束,但n已经不等于27了,所以会输出no。

解决方法是,在第一个if语句中加上n==m的判断,如果n等于m,则直接输出yes并跳过本次循环。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-11 19:11:16 | 显示全部楼层


占楼没用,上次跟Taoyuanh的抢最佳的经历我仍铭记着……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-11 19:13:13 | 显示全部楼层
歌者文明清理员 发表于 2023-5-11 19:11
占楼没用,上次跟Taoyuanh的抢最佳的经历我仍铭记着……

报优先看2楼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-11 19:16:48 | 显示全部楼层

可是那次 ,Taoyuanh直接发的,我只占个楼,帖子内容改好了,就,,,,,
就,最佳没了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-5-11 19:17:41 | 显示全部楼层
歌者文明清理员 发表于 2023-5-11 19:16
可是那次 ,Taoyuanh直接发的,我只占个楼,帖子内容改好了,就,,,,,
就,最佳没了

看情况吧,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-11 19:19:02 | 显示全部楼层

我要写一个自动回帖脚本
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-11 19:19:26 | 显示全部楼层
歌者文明清理员 发表于 2023-5-11 19:19
我要写一个自动回帖脚本

举报封IP
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-11 19:24:33 | 显示全部楼层

整天就想着举报,上次是不是你把我小号整没了?回复不删掉害我删不了测试贴,然后举报我小号?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-11 19:25:16 | 显示全部楼层
isdkz 发表于 2023-5-11 19:24
整天就想着举报,上次是不是你把我小号整没了?回复不删掉害我删不了测试贴,然后举报我小号?

你是说发那个text?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-11 19:25:26 | 显示全部楼层
你的代码有一些逻辑问题,所以当 n=27 的时候可能会打印 "no"。这是由于你的代码在检查 n 和 m 是否相等的时候有问题。具体来说,你的  while  循环中在 n 是 3 的倍数的时候会一直除以 3,然后检查 n 是否等于 m 或者 n 的两倍是否等于 m,但是这个过程在 n 不再是 3 的倍数或者 n 等于 1 的时候就会停止。这就导致了当 n 是 3 的倍数但是 n 除以 3 之后并不等于 m 时,你的程序会跳出  while  循环,然后打印 "no"。

比如,当 n=27,m=2 的时候,你的代码会首先将 n 除以 3 得到 9,然后再次将 n 除以 3 得到 3,最后再次将 n 除以 3 得到 1,然后跳出  while  循环。在这个过程中,n 没有等于 m 或者 n 的两倍没有等于 m,所以在  while  循环之后你的代码会打印 "no"。

如果你想在 n 是 3 的倍数且 n 除以 3 的结果等于 m 或者 n 的两倍等于 m 的时候打印 "yes",你需要稍微修改一下你的代码。这是一个修改后的代码示例:
#include<stdio.h>

int main(){
        printf("测试个数");
        int n,m,t;
        scanf("%d",&t);
        for(int i=1;i<=t;i++){
       
                scanf("%d",&n);
                scanf("%d",&m);
                if(n<m){
                        printf("no");
                        continue;
                }
                if(n==1){
                   printf("yes");
                        continue;
                }
                while(n%3==0&&n!=1){
                        n=n/3;
                        if(n==m){
                           printf("yes");
                           break;
                        }else if(n*2==m){
                           printf("yes");
                           break;       
                        }           
                }
                if(n!=m && n*2 != m){
                  printf("no");
                }
                       
                }
       
        return 0;
}

在这个修改后的版本中,我在  while  循环之后添加了一个条件检查 n*2 是否等于 m。这样,即使 n 不再是 3 的倍数,如果 n 的两倍等于 m,你的代码仍然会打印 "yes"。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-11 19:26:30 | 显示全部楼层
sfqxx 发表于 2023-5-11 19:25
你是说发那个text?

对呀,我测试程序呢,结果把小号整没了,我想测完就删帖的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-11 19:27:51 | 显示全部楼层
isdkz 发表于 2023-5-11 19:26
对呀,我测试程序呢,结果把小号整没了,我想测完就删帖的

你自己又不说
而且我也没举报
可能是管理封的吧?
那你为什么要发求助帖?
用户名是什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-11 19:28:02 | 显示全部楼层
isdkz 发表于 2023-5-11 19:24
整天就想着举报,上次是不是你把我小号整没了?回复不删掉害我删不了测试贴,然后举报我小号?

怎么改请求头,我怕Threebody1也被封
我到没事,Threebody1得升级呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-11 19:30:19 | 显示全部楼层
sfqxx 发表于 2023-5-11 19:27
你自己又不说
而且我也没举报
可能是管理封的吧?

用户名:dkz6174510,被禁言了,算了不管它,我就那个贴没有写不要回复结果被你撞上了,我以为很快就能测完了,我发求助是因为要测试能不能自动回复求助帖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-11 19:31:13 | 显示全部楼层
歌者文明清理员 发表于 2023-5-11 19:28
怎么改请求头,我怕Threebody1也被封
我到没事,Threebody1得升级呀

要改请求 ip?headers 加个 x-forwarded-for 不就行了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-11 19:32:58 | 显示全部楼层
isdkz 发表于 2023-5-11 19:31
要改请求 ip?headers 加个 x-forwarded-for 不就行了?

现场指导?看来我也得学学
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-11 19:33:00 | 显示全部楼层
isdkz 发表于 2023-5-11 19:31
要改请求 ip?headers 加个 x-forwarded-for 不就行了?

如何预防405
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-11 19:33:45 | 显示全部楼层
isdkz 发表于 2023-5-11 19:30
用户名:dkz6174510,被禁言了,算了不管它,我就那个贴没有写不要回复结果被你撞上了,我以为 ...

确实,你登你号看看看理由?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-28 01:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表