新足迹

标题: 这道题除了硬凑,有巧办法吗 [打印本页]

作者: piazzolla    时间: 2024-12-2 10:56
标题: 这道题除了硬凑,有巧办法吗
[attach]2530276[/attach]
稍微注明一下,最后的积是ZXYY
作者: AnnaSun    时间: 2024-12-2 11:44
529
作者: kui3000    时间: 2024-12-2 12:03
佩服楼主,这种不服输的精神,为了孩子,很能坚持。
作者: piazzolla    时间: 2024-12-2 12:29
AnnaSun 发表于 2024-12-2 12:44
529

有巧办法吗?
作者: piazzolla    时间: 2024-12-2 12:30
kui3000 发表于 2024-12-2 13:03
佩服楼主,这种不服输的精神,为了孩子,很能坚持。

小孩不懂,我可不得学懂了再喂给他吗
作者: AnnaSun    时间: 2024-12-2 12:57
piazzolla 发表于 2024-12-2 13:29
有巧办法吗?

XYZ=100X+10Y+Z
ZXYY=1000Z+100X+11Y

1800X+180Y+18Z=1000Z+100X+11Y
1700X+169Y=982Z

没有其他条件,然后就猜喽
作者: 管閒事的路人    时间: 2024-12-2 13:01
本帖最后由 管閒事的路人 于 2024-12-2 14:02 编辑

1. Y 是偶數
2. 考慮個位數 Y = 8Z (mod 10)
   (Y,Z) 只能是 (8,1),(6,2),(4,3),(2,4),(0,5),(8,6),(6,7),(4,8),(2,9)
3. 考慮被17除餘數, ZXYY - XYZ = 17*(XYZ),得 Y-4Z = 0 (Mod 17)
  (Y,Z) 只能是 (4,1), (8,2), (2,9)
4. 結合[2],[3]得 Y,Z =(2,9), X29 * 18 = 9X22, X = 6太大, 4太小,只剩五。

這些題沒意義。
作者: piazzolla    时间: 2024-12-2 13:05
管閒事的路人 发表于 2024-12-2 14:01
1. Y 是偶數
2. 考慮個位數 Y = 8Z (mod 10)
   (Y,Z) 只能是 (8,1),(6,2),(4,3),(2,4),(0,5),(8,6),(6,7 ...

为什么会出现一个要被17整除呢?
作者: RADEON    时间: 2024-12-2 13:06
一般就是枚举,然后发现矛盾再否定。
作者: 管閒事的路人    时间: 2024-12-2 13:12
本帖最后由 管閒事的路人 于 2024-12-2 14:16 编辑
piazzolla 发表于 2024-12-2 14:05
为什么会出现一个要被17整除呢?


這種 mod 幾 mod 幾的方法也是基本套路。
-比如學校教的整除條件都直接用這些推出來
-任何平方數被4除不會餘2,3
-還有很多。

選至於爲什麽選17純粹靈感,剛好看到兩個數XYZ和ZXYY,十位百位都一樣就減了一減
得 999Z + Y = 17 * (XYZ) 就選了mod17看看(能砍掉XYZ)。
作者: sun-shine    时间: 2024-12-2 13:57
AnnaSun 发表于 2024-12-2 13:57
XYZ=100X+10Y+Z
ZXYY=1000Z+100X+11Y

其实你已经解题到了一半儿了。

因为 1700 * X  各位是个0 , 所以  169 * Y 的各位  9Y 要匹配 982 * Z 的2 Z 的个位。

于是, 只有下面的4组是符合 这个各位匹配的原则。

9 * 2 = 2 * 9 ( Y= 2, Z = 9)
9 * 4 = 2 * 3 ( Y = 4 , Z = 3 )
9 * 6 = 2 * 2 ( Y = 6, Z = 2 )
9 * 8 = 2 * 1 ( Y = 9, Z = 1 ).

把四组数字带入  169Y + 1700 X = 982 Z.  能解出 X 是整数的,就是答案。  最后只有一组可以。


作者: chinahare    时间: 2024-12-2 14:01
十位数的Y是偶数,所以80Y+18Z的十位数是偶数,所以18Z的十位数是偶数,可得Z只能是6,7,8或者9

18(10Y + Z) mod 100=10Y+Y=11Y,所以18Z mod100=31Y
把Z=6,7,8,9分别代入仅在Z=9的情况下成立,Y=2,易得X=5
作者: 水月境天    时间: 2024-12-2 16:51
Guess and check 就是小学的巧办法。
作者: hhyfirst    时间: 2024-12-2 23:37
Y is even, 18 is not multiply of 4,

if YY=22, Z=4 or 9, and 22 is not multiply of 4, so Z=9。 9X22 is multiply of 9, so X=5, just check XYZ=529 work。

if check all the possible case:

if YY=44, Z=3 or 8, and 44 is multiple of 4, so Z=8。 8X44 is multiply of 9, so X=2, just check XYZ=248 not work。

if YY=66, Z=2 or 7, and 66 is not multiply of 4, so Z=7。7X66 is multiply of 9, so X=8, just check XYZ=867 not work。

if YY=88, Z=1 or 6, and 88 is multiple of 4, so Z=6。6X88 is multiply of 9, so X=5, just check XYZ=586 not work。

作者: DDD888    时间: 2024-12-4 12:23
本帖最后由 DDD888 于 2024-12-4 13:29 编辑

我写的rust language 命令行程序打印结果

用免费chatgpt生成框架程序https://chatgpt.com/share/674fbdef-9804-8009-8c53-8e973a55b0fe,再改一下,为时一分钟做好项目,运行结果0.82秒

https://play.rust-lang.org/?vers ... b1093827cb419cb864e

fn main() {
    for x in 1..10 {
        for y in 1..10 {
            for z in 1..10 {
                let xyz = 100 * x + 10 * y + z;
                let zxyy = 1000 * z + 100 * x + 10 * y + y;
                if xyz * 18 == zxyy {
                    if x != y && x != z && y != z {
                        println!("x: {}, y: {}, z: {}", x, y, z);
                    }
                }
            }
        }
    }
}

作者: DDD888    时间: 2024-12-4 12:31
DDD888 发表于 2024-12-4 13:23
我写的rust language 命令行程序打印结果

用免费chatgpt生成框架程序https://chatgpt.com/share/674fbdef- ...

这是稍微优化点的代码

fn main() {
    for x in 1..10 {
        for y in 1..10 {
            for z in 1..10 {
                if x != y && x != z && y != z {
                    let xyz = 100 * x + 10 * y + z;
                    let zxyy = 1000 * z + 100 * x + 10 * y + y;
                    if xyz * 18 == zxyy {
                        println!("x: {}, y: {}, z: {}", x, y, z);
                    }
                }
            }
        }
    }
}

作者: DDD888    时间: 2024-12-4 12:33
DDD888 发表于 2024-12-4 13:31
这是稍微优化点的代码

fn main() {

这是functional programming in rust

fn main() {
    (1..10)
        .flat_map(|x| {
            (1..10).flat_map(move |y| {
                (1..10).filter_map(move |z| {
                    if x != y && x != z && y != z {
                        let xyz = 100 * x + 10 * y + z;
                        let zxyy = 1000 * z + 100 * x + 10 * y + y;
                        if xyz * 18 == zxyy {
                            Some((x, y, z))
                        } else {
                            None
                        }
                    } else {
                        None
                    }
                })
            })
        })
        .for_each(|(x, y, z)| {
            println!("x: {}, y: {}, z: {}", x, y, z);
        });
}

作者: DDD888    时间: 2024-12-4 13:04
DDD888 发表于 2024-12-4 13:33
这是functional programming in rust

fn main() {

我问了chatgpt, 也是和我一样用了穷举法

https://chatgpt.com/share/674fc68c-8154-8009-8afd-d358a2db527a
作者: gavinavailable    时间: 2024-12-4 14:16
本帖最后由 gavinavailable 于 2024-12-4 15:20 编辑

(xyz0-xyz)×2  =zxyy

可以推出 y是小于等于4, z是大于等于6
因为(10-z)×2必须不能有十位数,才能保证 yy 是相同的。

那么z 必然不需要借一位

所以 (10-z)×2 =y 以及 (z-1-y) ×2=y 或者 10+y 前者方程得不到整数解,后者推出y=2 和z=9

再同理推出x
作者: wireless    时间: 2024-12-4 15:10
不用那么麻烦。如果ZXYY是18的倍数,那么Z+X+Y+Y也是18的倍数。它们都是个位数,所以Z+X+Y+Y必然等于18.
Y是偶数
Z=2x 或者Z=2x-1,所以Z+X大概就是3x。拿Y=2,4,6,8往Z+X+2*Y=18一套,直接就试出来了。
作者: piazzolla    时间: 2024-12-4 15:53
wireless 发表于 2024-12-4 16:10
不用那么麻烦。如果ZXYY是18的倍数,那么Z+X+Y+Y也是18的倍数。它们都是个位数,所以Z+X+Y+Y必然等于18.
Y ...

z=2x是怎么来的呢?
作者: 管閒事的路人    时间: 2024-12-4 17:59
DDD888 发表于 2024-12-4 13:33
这是functional programming in rust

fn main() {

還有待加強,1..10就錯了。
作者: DDD888    时间: 2024-12-4 18:12
本帖最后由 DDD888 于 2024-12-4 19:15 编辑
管閒事的路人 发表于 2024-12-4 18:59
還有待加強,1..10就錯了。


Why?

(i.e., integers from 1 to 9)

The outermost flat_map iterates over the numbers from 1 to 9 and assigns each value to x.


https://chatgpt.com/share/67500f65-78a0-8009-a6da-6038e2c04b85
作者: wireless    时间: 2024-12-4 22:47
piazzolla 发表于 2024-12-4 16:53
z=2x是怎么来的呢?

XYZ * 18 = ZXYY, 18略小于20,你看两个数的最高位,所以z等于2x或者2x-1




欢迎光临 新足迹 (https://oursteps.co/bbs/forum.php/bbs/forum.php/) Powered by Discuz! X3.4