鱼C论坛

 找回密码
 立即注册
123
返回列表 发新帖
楼主: 啊这啧啧啧

打印问题

[复制链接]
发表于 2023-5-11 19:45:44 | 显示全部楼层
sfqxx 发表于 2023-5-11 19:44
我点进去了,打不开@isdkz

我一开始能打开,多刷几次就405了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2023-5-11 19:46:20 | 显示全部楼层
歌者文明清理员 发表于 2023-5-11 19:45
我的问题是如何防住这个

这还真不好防,好像要真的换ip才可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-11 19:46:41 | 显示全部楼层
isdkz 发表于 2023-5-11 19:45
我一开始能打开,多刷几次就405了

我也是,该死的taoyuanh在高山的论坛上@liuhongrun2023(未正确at),结果这个链接就是mod=team
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-11 19:47:14 | 显示全部楼层
歌者文明清理员 发表于 2023-5-11 19:45
这不是手机上发的
from fishc mobile呢

我在手机上点了使用电脑版
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-11 19:47:49 | 显示全部楼层
isdkz 发表于 2023-5-11 19:47
我在手机上点了使用电脑版

不对,真正的手机上是点不出帖子格式的按钮的,没反应
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-11 19:49:44 | 显示全部楼层
歌者文明清理员 发表于 2023-5-11 19:47
不对,真正的手机上是点不出帖子格式的按钮的,没反应


Screenshot_2023-05-11-19-48-33-988_com.android.browser.jpg


用电脑版就可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-11 19:54:21 | 显示全部楼层
isdkz 发表于 2023-5-11 19:49
用电脑版就可以

跟我妈的手机一样
我的头像也太古老了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-11 20:10:37 | 显示全部楼层
isdkz 发表于 2023-5-11 19:45
我一开始能打开,多刷几次就405了

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

使用道具 举报

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

你也405了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-11 20:25:55 | 显示全部楼层

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

使用道具 举报

 楼主| 发表于 2023-5-11 22:39:46 | 显示全部楼层
sfqxx 发表于 2023-5-11 19:06
当 n=27时,对于第一个while循环执行了三次,n分别变成9、3和1。在第三次迭代后,n=1,但程序还会继续执行w ...

输入6 4,还是会打印no
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-11 22:46:52 | 显示全部楼层

输入6 4;打印还是有no
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-11 23:02:03 | 显示全部楼层
isdkz 发表于 2023-5-11 19:25
你的代码有一些逻辑问题,所以当 n=27 的时候可能会打印 "no"。这是由于你的代码在检查 n 和 m 是否相等的 ...
#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);
                int k=n;
                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;        
                        }
                }
                while(k%3==0&&k!=1){
                        k=(k/3)*2;
                        if(k==m){
                        printf("yes");break;
                        }else if(k/3==m){
                        printf("yes");break;        
                        }                   
                }if(n!=m&&n*2!=m){
                  printf("no");
                }
                if(k!=m&&k*2!=m){
                  printf("no");
                }
        }
        return 0;
}
//已经将代码进行改进,结果又改出错了,能不能只让他输出第一个判断的yes或者no
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-11 23:06:45 | 显示全部楼层
啊这啧啧啧 发表于 2023-5-11 23:02
//已经将代码进行改进,结果又改出错了,能不能只让他输出第一个判断的yes或者no

对于你想要只输出第一个判断的 "yes" 或 "no",你可以在每个判断后添加一个  continue  语句,这样就可以跳过本次循环的剩余部分,直接进入下一个循环。这样,一旦打印出 "yes" 或 "no",就会立即进入下一个测试,不会再打印第二个 "yes" 或 "no"。

你的代码还有一些逻辑错误,你在判断 n 或 k 是否等于 m 或 n 或 k 的两倍是否等于 m 的时候需要使用或者运算符  ||  而不是和运算符  && 。此外,你需要在  while  循环中添加一个判断来检查是否已经打印出 "yes",如果已经打印出 "yes",那么就应该跳出  while  循环。

以下是修改后的代码:
#include<stdio.h>

int main(){
        printf("测试个数");
        int n,m,t;
        scanf("%d",&t);
        for(int i=1;i<=t;i++){
                int flag = 0; // 添加一个标志位来检查是否已经打印出 "yes"
                scanf("%d",&n);
                scanf("%d",&m);
                int k=n;
                if(n<m){
                        printf("no\n");
                        continue;
                }
                if(n==1){
                   printf("yes\n");
                   continue;
                }
                while(n%3==0&&n!=1){
                        n=n/3;
                        if(n==m || n*2==m){
                        printf("yes\n");
                        flag = 1; // 如果已经打印出 "yes",那么设置标志位为 1
                        break;
                        }
                }
                if(flag) continue; // 如果已经打印出 "yes",那么跳过本次循环的剩余部分,直接进入下一个循环
                while(k%3==0&&k!=1){
                        k=(k/3)*2;
                        if(k==m || k/3==m){
                        printf("yes\n");
                        flag = 1; // 如果已经打印出 "yes",那么设置标志位为 1
                        break;
                        }
                }
                if(flag) continue; // 如果已经打印出 "yes",那么跳过本次循环的剩余部分,直接进入下一个循环
                printf("no\n");
        }
        return 0;
}

这个修改后的版本应该可以满足你的需求。注意,我添加了  \n  来在每次打印 "yes" 或 "no" 后换行,这样输出的结果会更清晰。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-11 23:13:42 | 显示全部楼层
isdkz 发表于 2023-5-11 23:06
对于你想要只输出第一个判断的 "yes" 或 "no",你可以在每个判断后添加一个  continue  语句,这样就可以 ...

编译有些问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-11 23:51:43 | 显示全部楼层
isdkz 发表于 2023-5-11 23:06
对于你想要只输出第一个判断的 "yes" 或 "no",你可以在每个判断后添加一个  continue  语句,这样就可以 ...

是我忘关窗口了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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