1到9中选出(十个数字中任意选出三个数字)三位数,如何能猜出这三位数?

当所求的和最大时,应该考虑把较小的数,放在最后,,放在前面,这样可使小的数在高位加的次数少些,当所求的和最小时,应该考虑把较大的数,放在最后只加一次,,放在前面,这样可使大的数在高位加的次数少些,便可得出答案.
所求的和最大时,要放最后,并考虑和的大小,明显后者大,因此最末是,顺次放最前,可使小的数在高位加的次数少些.中间排序基本没所谓,因为出现在哪位上都在个十百加一次.结论,最大时的排列如:或这种比简单排成,要好.所求的和最小时,放最后只加次,往最后的前放,加的多,不如放最前.在最前要考虑和的大小,因最前应是,中间排序基本没所谓,因为出现在哪位上都在个十百加一次.结论,最小时的排列如:或这种比简单排成,要好.故答案为,.
本题考查了整数问题的综合运用,难度比较大,是一道竞赛题,解题的关键是读懂题意进行求解,要学会设未知量和数字排列的运用.
4065@@3@@@@整数问题的综合运用@@@@@@272@@Math@@Junior@@$272@@2@@@@整数问题@@@@@@55@@Math@@Junior@@$55@@1@@@@数学竞赛@@@@@@7@@Math@@Junior@@$7@@0@@@@初中数学@@@@@@-1@@Math@@Junior@@
第一大题,第9小题
求解答 学习搜索引擎 | 将数字1,2,3,4,5,6,7,8,9按任意顺序写成一排,其中相邻的3个数字组成一个三位数,共有七个三位数,对这七个三位数求和,则数字1∽9的每一种排列对应一个和(如将数字1∽9写成1,3,4,2,7,5,8,9,6,可组成134,342,427,275,758,589,896这七个三位数,它们的和是3421).所求得的和中,最大的数是 ___,最小的数是 ___.该问题被发起重新开启投票
投票剩余时间:
之前被关闭原因:
该问题被发起删除投票
投票剩余时间:
距离悬赏到期还有:
参与关闭投票者:
关闭原因:
该问题已经被锁定
锁定原因:()
保护原因:避免来自新用户不合宜或无意义的致谢、跟帖答案。
该问题已成功删除,仅对您可见,其他人不能够查看。
最笨的法,穷举。。。问题可看作把1-9 9个数字重新排列,然后对重新排列后的数,取第1,2,3个组合为第一个数字,取第4,5,6个为第二个数字,第7,8,9个为第三个数字,然后验证比值是否为1:2:3。排列过程就是个全排列吧。
复习了一下全排列,得出了结果:192, 384, 576219, 438, 657273, 546, 819327, 654, 981
从网上找的一个全排列算法基础上修改的,C语言,通过GCC编译。
#include &stdio.h& void Swap(char *a, char *b) {
char temp = *a;
*b = } void check(int num1, int num2, int num3){
if(num1*2 == num2 && num1*3 == num3)
printf("%d , %d , %d\n", num1, num2, num3);
}}int getNum(char *a){
int tmp=0;
tmp = (*a++ - '0')*100;
tmp += (*a++ - '0')*10;
tmp += *a -'0';}void Perm(char list[], int k, int m) {
if (k == m) {
check(getNum(list), getNum(list+3), getNum(list+6));
for (i=k; i &= i++) {
Swap (list+k, list+i);
Perm (list, k+1, m);
Swap (list+k, list+i);
} } int main() {
char s[]="";
Perm(s, 0, 8);
return 0; }
这个可以这样来做。设三个三位数从大到小分别是abc,def,hij,则有hij2=def
hij3=abc由于所有的字母只能取1-9,且不重复,那么由上面的结论可以得出:1.由hij2=def知,def一定是偶数,所以f只能取值2,4,6,8中的一个;
2.由于f不能取0,所以j不能取5;
3.由于hij3=abc,则h3不能超过10,所以h只能取值1,2,3中的一个,而且如果h=3,则a=9,且i3不能有进位,则在这种情况下i只能取值1,2(h=3,比3大的都会进位)综上,算法可以这样设计:1.由于最大的数是987,而987/3=329,而最小的数是123,所以,外层循环hij可以从123到369取值,跳过每10个数中j=5的那个数(上述结论2,一次剪枝)。2.计算hij2获得def的值,这时候可以通过判断是否有重复数字而判断是否舍弃(二次剪枝),因为f只能取值2,4,6,8,所以很容易会在hij和def之间产生重复,从而避免一些额外的计算。
3.计算hij3获得abc的值,然后再次判断。一般来说,前两步已经去掉了一些不可能的情况,所以这一步的计算会减少许多,这样也可以适当的提高效率。
我也疑问,难道这问题只能用穷举吗?应该有数学公式的吧?
for (var j = 123; j & 330; j++) {
(function(e) {
var f = e * 2;
var g = e * 3;
var t = e.toString()+f+g
if (!t.match(/0/g)) {
var reg = /(?:^|)(\w{1}).*\1/g;
if (!reg.test(t)) {
console.log(e+","+e*2+","+e*3)
/* gcc 编译*/#include &stdio.h&#include &string.h&void count_digits(int n, int * num) {
while (n != 0) {
num[n%10]++; /* get the last digit, and count it */
n /= 10; /* it will be truncated */
}}void main() {
int num[10];
for (i = 123; i &= 329; i++) {
memset((void *)num, 0, sizeof(num));
count_digits(i, num);
count_digits(i*2, num);
count_digits(i*3, num);
/* make sure all digits appear exactly one time */
for (j = 1; j & 10 && 1 == num[j]; j++);
/* find an answer */
if (j == 10)
printf("%d %d %d\n", i, i*2, i*3);
不是您所需,查看更多相关问题与答案
德问是一个专业的编程问答社区,请
后再提交答案
没有相关问题
关注该问题的人
共被浏览 (10797) 次1到9任意三位数相减之差等于451数字不得重复怎么做
1到9任意三位数相减之差等于451数字不得重复怎么做
09-09-03 &匿名提问
不明白你问的啥
请登录后再发表评论!扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
下载作业帮安装包
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
1到9这九个数字中任选3个排成没有重复数字三位数,要个位上的数字大于十位上的数字,这样的三位数多少个
挚爱小慧faV
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
84个 123 124 125 126 127 128 129 134 135 136 137……以1开头的 有 7+6+5+4+3+2+1个 以2开头的有6+5+4+3+2+1个 以此类推 就可以得出答案 是 84个
为您推荐:
其他类似问题
扫描下载二维码

我要回帖

更多关于 十个数字中任意选出三个数字 的文章

 

随机推荐