C++中取模运算符(%)的正确用法及巴士空位计算问题求解
解决巴士空座位计算的取模使用问题
嘿,我完全懂你现在的困惑!首先要告诉你:你对取模运算符%的核心理解是对的——它确实会返回两个数相除后的余数(比如16%3=1这个例子完全正确)。问题出在你把余数直接当成了空座位数,而没有结合巴士容量做转换。
咱们拿示例输入126来拆解:
- 巴士一次载50人,126除以50,商是2(也就是前2辆车载了100人),余数是26——这个余数是最后一辆车需要搭载的乘客数,而不是空座位数。
- 最后一辆车的空座位数,应该是巴士总容量减去这个载客数:
50-26=24,这才是符合预期的结果。
你之前的代码直接输出了余数stop%bus,自然和预期不符。这里给你两种正确的写法:
写法1:带条件判断,逻辑更直观
int bus = 50; int stop; cin >> stop; int remainingPassengers = stop % bus; // 如果余数为0,说明刚好坐满,空座位是0;否则用容量减余数 int emptySeats = (remainingPassengers == 0) ? 0 : (bus - remainingPassengers); cout << emptySeats; return 0;
写法2:用取模简化判断,代码更简洁
int bus = 50; int stop; cin >> stop; // 当总人数是50的倍数时,(bus - 0) % bus会得到0,刚好符合空座位为0的情况 cout << (bus - (stop % bus)) % bus; return 0;
再给你验证几个场景:
- 输入150(刚好3辆满座):
150%50=0,(50-0)%50=0,输出0,正确。 - 输入50:输出0,正确。
- 输入77:
77%50=27,50-27=23,输出23,正确。
内容的提问来源于stack exchange,提问作者Sam P
相关产品推荐
相关产品推荐

