标题:题目:ABC为正整数,A>B>C,100A+10B+C=X,X-100C-10B-A=Y,得数Y个位变百位 ...
只看楼主
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
结帖率:99.76%
已结贴  问题点数:100 回复次数:7 
题目:ABC为正整数,A>B>C,100A+10B+C=X,X-100C-10B-A=Y,得数Y个位变百位,十位不变,百位变个位组成新数Z,Y+Z=
答案:
程序代码:
#include <stdio.h>

int f(int n)
{
    return (n%10*100+n/10%10*10+n/100);
}


int main(int argc, char *argv[])
{
    for(int x=100;x<=999;x++)
    {
        if(x/100 >x/10%10 && x/10%10 > x%10)
        {
            if(x-f(x)+f(x-f(x))==1089) printf("%d\n",x);
        }
    }
    return 0;
}


210
310
320
321
410
420
421
430
431
432
510
520
521
530
531
532
540
541
542
543
610
620
621
630
631
632
640
641
642
643
650
651
652
653
654
710
720
721
730
731
732
740
741
742
743
750
751
752
753
754
760
761
762
763
764
765
810
820
821
830
831
832
840
841
842
843
850
851
852
853
854
860
861
862
863
864
865
870
871
872
873
874
875
876
910
920
921
930
931
932
940
941
942
943
950
951
952
953
954
960
961
962
963
964
965
970
971
972
973
974
975
976
980
981
982
983
984
985
986
987
搜索更多相关主题的帖子: ABC 个位 百位 组成 int 
2017-07-02 09:46
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
看看 还有更短的或者更优的代码吗

DO IT YOURSELF !
2017-07-02 09:47
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
这个命题可以证明了(我不会啊) 这个1089是个恒定值

DO IT YOURSELF !
2017-07-02 10:09
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:34 
题目好复杂。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-07-02 11:22
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:0 
如果ABC均是三位数。

程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

typedef struct NUM{
int A;
int B;
int C;
}NUM;

NUM
Rand( void );//生成3个随机数,满足两个条件,一,都是三位数;二,A>B>C

int
Rvalue( int value );//数字逆序。

int
main( void )
{
    NUM value;
    int x, y, z;

    value = Rand();

    x = 100 * value.A + 10 * value.B + value.C;
    y = x - 100 * value.C - 10 * value.B - value.A;
    printf("%d\n",y);
    z = Rvalue( y );

    printf( "%d\n", y + z );

    return 0;
}

NUM
Rand( void )
{
    NUM value;
    srand( ( unsigned int )time( NULL ) );

    while( 1 )
    {
        value.A = rand() % 10;
        value.B = rand() % 10;
        value.C = rand() % 10;
        if( value.A > value.B && value.B > value.C )
            break;
    }

    return value;
}

int
Rvalue( int value )
{
    static int e;

    e = e * 10 + ( value % 10 );

    if( 10 < value )
        Rvalue( value / 10 );

    return e;
}


[此贴子已经被作者于2017-7-2 19:58编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-07-02 12:40
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:34 
看上去代码简单~不过因为有if条件限制~~~会导致多次没有用的判断~可以用栈或递归~当然最近没啥精力弄了~~这个打算先放了~还是看看能不能把那个树弄好再说~

PS:看代码的时候没有看题目了~把题目看过后此贴忽略~详细解释跟下帖~~

[此贴子已经被作者于2017-7-2 14:20编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-07-02 13:16
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
(100a+10b+c)-(100c+10b+a)=99(a-c);
y=99(a-c);

y的个位:99(a-c)%10;
y的十位:(99(a-c)/10)%10;
y的百位:99(a-c)/100;

新得到的z:

为:
99(a-c)/100+10*((99(a-c)/10)%10)+100*(99(a-c)%10);



y+z=99(a-c)+99(a-c)/100+10*((99(a-c)/10)%10)+100*(99(a-c)%10);
难道这个式子为恒值1089?~

99的倍数为
y=
198
297
396
495
594
693
792
891

z=
891
792
693
594
495
396
297
198

个位和百位的数字和为9

所以设
y的个位数是a
y的十位数是9
y的百位数是9-a

y的表示方法:
a+90+100*(9-a)=990-99a;

z的个位数是9-a
z的十位数是9
z的百位数是a

z的表示方法:

9-a+90+100a=99+99a;

y+z=990-99a+99+99a=990+99=1089;

证明完毕~~~~~~~~~~~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-07-02 14:09
lmlm1001
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:4
帖 子:107
专家分:550
注 册:2015-3-1
得分:34 
楼主可以考虑把循环换成
    int a, b, c;
    for( c = 0;  c < 10; ++c )
        for( b = c + 1; b < 10; ++b )
            for( a = b + 1; a < 10; ++a )
                //statement;

此命题能通过数学证明成立:
具体过程
Y = 99A - 99C = 100(A-C) - (A-C) 本题中只有198 297 396 495 594 693 792 891
颠倒之和是常数。
2017-07-02 21:41



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-479106-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.045426 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved