如何优雅地用C++爆破初二数学题(图一乐)

今天做数学作业的时候看到了一道题,题目描述如下:

√(24n)是正整数,求最小的整数n的值

很明显,这道简单的大题可以用枚举解决(也可以直接公倍数枚举,更快一点,但是最多只用枚举不到10次),正当我列了个大括号并解决完了这道题准备收起作业本的时候,我一个激灵,打了这么久CSP的复赛题,不如来看看这样的简单题目,夯实一下基础,顺带放松一下(省流:懒,觉得考试题太难),于是……

/*
 *题目描述:
 *sqrt(24n)是正整数,求最小的整数n的值
*/
#include <bits/stdc++.h>
using namespace std;

int main() {
    /*for(int i = 1;; ++i) {
        double num = sqrt(24 * i);
        int numi = static_cast <int> (num);
        if(num == numi) {
            printf("num: %d", i);
            break;
        }
    }*/
    for(int i = 1;; ((sqrt(24 * i) == static_cast <int> (sqrt(24 * i))) ? (printf("num: %d", i), exit(0)) : void()), ++i);
    return 0;
}

main函数中多行注释括起来的就是主题逻辑,从1开始枚举,每次计算根号24n的值并判断是否是整数,如果是则输出n并退出

很明显,注释括起来的代码不符合我的暴力美学式思考逻辑,因此就有了下面的究极整合版——直接把break换成exit(0),然后把变量直接换成函数,用三元运算符团成一团,塞进for循环的++i前面,足够暴力,足够直接,非常符合我的审美(省流:压榨了CPU省了内存)

PS:最开始写出下面的究极整合版的时候,for循环后面忘加分号了,所以第一次循环就直接return了,没有输出结果,搞的我还研究了半天:/

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值