C语言程序设计-1088 三人行

本文探讨了C语言编程中一个关于三人行的问题,指出原代码存在的错误,包括双重循环和错误的数值比较方式。作者强调了在处理浮点数比较时的精度问题,并提供了一个void-printf函数用于double类型的打印输出。此外,还分享了解决重复输出最大值问题的策略,即从大到小遍历的方法。
摘要由CSDN通过智能技术生成

自己的垃圾代码,思路错误了,将甲的十位和各位拆开进行遍历,造成双重循环,而且容易出bug。对于两种方式计算丙值的比较也错误了,int == int 是明显错误的,double == double也是不对的,因为double也有一定的精度问题,只有判断int == double 才能得到正确的结果。

#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main() {
	int wo, x, y, a, b, jia, yi, bing, cnt=0;
	double t,q;
	cin >> wo >> x >> y;
	for(int i = 1; i < 10; i++){
		for(int j = 0; j < 10; j++){
			t = (abs(9*i-9*j) / x);
			q = (10*j+i) /y ;
			if( t == q ){
				jia = 10*i + j; yi = 10*j + i; bing = yi / y;
				cnt++;
			}
		}
	}
	if(cnt == 0) cout << "No solution";
	else{
		printf("%d ", jia);
		if(wo == jia) printf("ping ");
		else printf("%s", wo>jia?"gai":"cong");
		if(wo == yi) printf("ping ");
		else printf("%s", wo>yi?"gai":"cong");
		if(wo == bing) printf("ping ");
		else printf("%s", wo>bing?"gai":"cong");
	}
	
	return 0;
} 

二次修改,

  1. 创建了一个void-printf 函数做打印输出,注意参数为double类型。
  2. 尽量避免使用 / 进行比较运算,是错误的。
    3.用从大到小进行遍历,解决如果有重复输出最大值的问题,非常巧妙。

https://blog.csdn.net/liuchuo/article/details/84972915

#include <iostream>
#include <cmath> 
using namespace std;
int m, x, y;
void print(double n){                          //这也是个错点,double还是int 
	if(m == n) printf(" Ping");
	else if(m > n) printf(" Gai");
	else printf(" Cong");
}
int main() {
	cin >> m >> x >> y;
	for(int i = 99; i >= 10; i--){
		int j = i % 10 * 10 + i / 10;
		double k = abs(i - j) * 1.0/ x;
		if(j == k * y){                    
		//if(k == j / y){                  //用除是错误的 
			cout << i;
			print(i); print(j); print(k);
			return 0;
		}
	}
	cout << "No Solution";
	return 0;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值