鱼C论坛

 找回密码
 立即注册
查看: 1912|回复: 8

[已解决]请教解决问题的思路

[复制链接]
发表于 2021-3-27 22:07:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
虽然断断续续一直在学,但是总是不得要领。最近碰到一些关于数字的题目,屡见屡败,根本不知道怎么解决,被打击得自信心降至负值。
举例:编写一个程序,将1,2,3,……,9,共9个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:3的比例,例如:192、384、576就是这样的一组三位数。试求出所有满足条件的三个三位数。这个题中,我不知道怎样表示这三个数?
再举一例,有2,3,4,5,6,7六个数字,组合成2个三位数,使它们的乘积最大。如何表示乘积最大?
这种题统统不知道如何下手,真是让人欲哭无泪。
请教大神们,这种题如何思考?如何下手?谢谢先!
最佳答案
2021-3-27 23:46:38
就像你说的,给你举个栗子,但是不给你注释了,如果对照代码你能看明白或许可以举一反三
这种题目并不是只有一种算法,其他的方式或许比我这个更简洁更易懂等待你发掘
这题目我第一题第二题本来可以用一样的思路来写,但我用了两种思路,或许能给你更多启发
废话不多讲,直接上代码
# 题目1
nums = range(100,1000)
for num in nums:
    if num*3 in nums:
        allnum = list(str(num))+list(str(num*2))+list(str(num*3))
        if "0" in allnum:
            continue
        if len(set(allnum)) == 9:
            print(num,num*2,num*3)
    else:
        break

# 题目2
nums = []
data = sorted(list("234567"))
for num1 in range(234,766):
    for num2 in range(234,766):
        allnum = sorted(list(str(num1))+list(str(num2)))
        if allnum == data:
            nums.append([num1,num2,num1*num2])
res = sorted(nums, key = lambda x:x[-1])
print(res[-1])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-3-27 22:36:00 | 显示全部楼层
请路过的大神们帮帮忙,帮我解决我举的两个例子吧!拜谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-27 22:38:25 | 显示全部楼层
for(i = 1; i<10; i++){
    for(j = 1; j<10; j++){
        for(k = 1; k<10; k++){
            number = i*100+j*10+k
        }
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-27 22:54:18 | 显示全部楼层
肯定是777*777最大了。你这问题应该是没表述清楚吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-27 23:46:38 | 显示全部楼层    本楼为最佳答案   
就像你说的,给你举个栗子,但是不给你注释了,如果对照代码你能看明白或许可以举一反三
这种题目并不是只有一种算法,其他的方式或许比我这个更简洁更易懂等待你发掘
这题目我第一题第二题本来可以用一样的思路来写,但我用了两种思路,或许能给你更多启发
废话不多讲,直接上代码
# 题目1
nums = range(100,1000)
for num in nums:
    if num*3 in nums:
        allnum = list(str(num))+list(str(num*2))+list(str(num*3))
        if "0" in allnum:
            continue
        if len(set(allnum)) == 9:
            print(num,num*2,num*3)
    else:
        break

# 题目2
nums = []
data = sorted(list("234567"))
for num1 in range(234,766):
    for num2 in range(234,766):
        allnum = sorted(list(str(num1))+list(str(num2)))
        if allnum == data:
            nums.append([num1,num2,num1*num2])
res = sorted(nums, key = lambda x:x[-1])
print(res[-1])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-27 23:59:23 | 显示全部楼层
第二个问题 结果是:485179 = 743 * 653
#include <stdio.h>
int main()
{
        int num1,num2,i,j,k,a,b,c,max_a,max_b;
        int max = 0;
        
        for(i = 2; i<8; i++){
                for(j = 2; j<8; j++){
                        for(k = 2; k<8; k++){
                                if(i==j||j==k||i==k)
                                        continue;
                                num1 = i*100+j*10+k;
                                for(a = 2; a<8; a++){
                                        for(b = 2; b<8; b++){
                                                for(c = 2; c<8; c++){
                                                        if(a==b||a==c||b==c||a==i||a==j||a==k||b==i||b==j||b==k
                                                          ||c==i||c==j||c==k)
                                                                continue;
                                                        num2 = a*100+b*10+k;
                                                        if(max <= num1 * num2)
                                                        {
                                                                max = num1 * num2;
                                                                max_a = num1;
                                                                max_b = num2;
                                                        }
                                                }
                                        }
                                }
                        }
                }
        }
  printf("%d = %d * %d\n",max,max_a,max_b);
          
   return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-3-28 08:32:01 | 显示全部楼层
13561229223 发表于 2021-3-27 23:59
第二个问题 结果是:485179 = 743 * 653

感谢大神
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-28 08:32:34 | 显示全部楼层
qq1151985918 发表于 2021-3-27 23:46
就像你说的,给你举个栗子,但是不给你注释了,如果对照代码你能看明白或许可以举一反三
这种题目并不是只 ...

感谢大神,我要慢慢消化
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-28 09:09:41 | 显示全部楼层
kittenpuppy 发表于 2021-3-28 08:32
感谢大神,我要慢慢消化

有看不懂的可以继续问我,我看到后会给你回复。

就像本题中的题目二,我用了另外的算法,事实证明,如果题目二用跟题目一一样的算法,效率可以提高17倍

用题目一的算法写题目二 需要 0.023 秒,而代码中的题目二足足用了 0.402秒,相差17.47倍,希望你能用题目一的算法写出题目二
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 03:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表