请教解决问题的思路
虽然断断续续一直在学,但是总是不得要领。最近碰到一些关于数字的题目,屡见屡败,根本不知道怎么解决,被打击得自信心降至负值。举例:编写一个程序,将1,2,3,……,9,共9个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:3的比例,例如:192、384、576就是这样的一组三位数。试求出所有满足条件的三个三位数。这个题中,我不知道怎样表示这三个数?
再举一例,有2,3,4,5,6,7六个数字,组合成2个三位数,使它们的乘积最大。如何表示乘积最大?
这种题统统不知道如何下手,真是让人欲哭无泪。
请教大神们,这种题如何思考?如何下手?谢谢先! 请路过的大神们帮帮忙,帮我解决我举的两个例子吧!拜谢!
for(i = 1; i<10; i++){
for(j = 1; j<10; j++){
for(k = 1; k<10; k++){
number = i*100+j*10+k
}
}
} 肯定是777*777最大了。你这问题应该是没表述清楚吧? 就像你说的,给你举个栗子,但是不给你注释了,如果对照代码你能看明白或许可以举一反三
这种题目并不是只有一种算法,其他的方式或许比我这个更简洁更易懂等待你发掘
这题目我第一题第二题本来可以用一样的思路来写,但我用了两种思路,或许能给你更多启发
废话不多讲,直接上代码
# 题目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()
res = sorted(nums, key = lambda x:x[-1])
print(res[-1])
第二个问题 结果是: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;
} 13561229223 发表于 2021-3-27 23:59
第二个问题 结果是:485179 = 743 * 653
感谢大神 qq1151985918 发表于 2021-3-27 23:46
就像你说的,给你举个栗子,但是不给你注释了,如果对照代码你能看明白或许可以举一反三
这种题目并不是只 ...
感谢大神,我要慢慢消化 kittenpuppy 发表于 2021-3-28 08:32
感谢大神,我要慢慢消化
有看不懂的可以继续问我,我看到后会给你回复。
就像本题中的题目二,我用了另外的算法,事实证明,如果题目二用跟题目一一样的算法,效率可以提高17倍
用题目一的算法写题目二 需要 0.023 秒,而代码中的题目二足足用了 0.402秒,相差17.47倍,希望你能用题目一的算法写出题目二
页:
[1]