|
发表于 2023-5-11 23:06:45
|
显示全部楼层
对于你想要只输出第一个判断的 "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" 后换行,这样输出的结果会更清晰。 |
|