首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

如何破解数字迷

2012-10-08 
怎么破解数字迷破解VINGTCINQ+CINQTRENTE规则:1 不同的英文字母表示不同的数字2 每一个数最左边不是0.3 上

怎么破解数字迷
破解
  VINGT
  CINQ
  + CINQ
  TRENTE
规则:
1 不同的英文字母表示不同的数字
2 每一个数最左边不是0.
3 上面的题目是加,表示VINGT这个五位数与CINQ这个四位数的两倍相加后,回得到TRENTE这个六位数,并且数字的安排如谜语所表示。

能用递归做吗?
如果可以那怎么做?

[解决办法]
那个算式是固定的吗?也就是说,是不是总是A+B+B=C?

如果式子固定,那么也不难求。只需要不断为每个字母枚举不同数字,然后递归,如果到了某一步,发现下一步无法再进行,那么就回溯修改一下数字,再递归。
[解决办法]
每个字母代表一个数字,将数字代入到式子中,使表达式成立即可,是这个意思吧。
[解决办法]

探讨
那个算式是固定的吗?也就是说,是不是总是A+B+B=C?

如果式子固定,那么也不难求。只需要不断为每个字母枚举不同数字,然后递归,如果到了某一步,发现下一步无法再进行,那么就回溯修改一下数字,再递归。

[解决办法]
目前相到的:
 VINGT
CINQ
CINQ
-------
TRENTE

V != 0
C != 0
T != 0
Q != 0
N != 0
I != 0

(T + Q + Q)%10 = E;

T = 1(I + C + C + 百分位的进位,所得到的进位不可能超过9,V也不可能超过9)

下面的兄弟再想想
[解决办法]
探讨
引用:
1.具体哪个字母代表哪个数字
因为数字只有10个(0~9),字母有26个,那剩下的16字母做什么?
具体的匹配原则是什么?


楼主给出的式子中没有出现所有的字母,只有下面10个字母:
VINGTCQTRE

[解决办法]
探讨
引用:
引用:
1.具体哪个字母代表哪个数字
因为数字只有10个(0~9),字母有26个,那剩下的16字母做什么?
具体的匹配原则是什么?


楼主给出的式子中没有出现所有的字母,只有下面10个字母:
VINGTCQTRE


9个。。。

[解决办法]
麻烦楼主再确认一下题目,我怎么觉得题目好像出错了似的,理由如下:
C/C++ code
 VINGT  CINQ  CINQ-------TRENTEV != 0C != 0T != 0Q != 0N != 0I != 0(T + Q + Q)%10 = E;T = 1 VING1  CINQ  CINQ-------1REN1EGRE三者中可能存在0G != 0, 因为如果G=0,(N + N)%10 = 1就不可能成立。RE两者中可能存在0E != 0, 因为如果E=0,(1 + Q + Q)%10 = E就不可能成立。所以R=0到目前位置得到:R = 0T = 1 VING1  CINQ  CINQ-------10EN1E(N + I + I)%10 = N所以I = 5到目前为止得到:R = 0T = 1I = 5 V5NG1  C5NQ  C5NQ-------10EN1EV => 8V + 进位 = 10,而进位<=2E肯定是奇数(3, 7, 9中的一个) 因为 (1 + Q + Q)%10 = E  G肯定是奇数(3, 7, 9中的一个)(1 + 2Q)%10 = (5 + 2C)%10(6 + 2C)%10 = E(6 + 2C)肯定是偶数,而E是奇数,这个矛盾
[解决办法]
各位兄弟帮忙看看,或许上面的推导什么地方有问题?
[解决办法]
为什么R就一定得是0?
........................
GRE三者中可能存在0
G != 0, 因为如果G=0,(N + N)%10 = 1就不可能成立。

RE两者中可能存在0
E != 0, 因为如果E=0,(1 + Q + Q)%10 = E就不可能成立。

所以R=0

[解决办法]
int V,I,N,G,T,C,Q,R,E;
9个for循环取0~9的不同数字
判断VINGT + CINQ == TRENTE
满足条件就求出解了啊 啊~~~
[解决办法]
C/C++ code
/*    V I N G T       C I N Q +     C I N Q --------------  T R E N T E T = 1; //5为数加一个5位数(或更小的数)的和是6位数,很容易判断6位数首位是1R = 0; //I+C+C的进位至多是2,V至多是9,因此R是0或1。1已用,R是0V = 8/9;//这个判断条件在代码中没有用到。 I+C+C的进位至多是2,所以V至少是8I = 4/9;//这个判断条件在代码中没有用到.  百位 (N+I+I+进位)%10 = N, I只可能是4、5、9。再看十位G+N+N结果十位是1,一次十位一定有进位,故I不可能是5    V I N G 1       C I N Q +     C I N Q --------------  1 0 E N 1 E *///g_used[i] == false 代表数组中还没用i这个数字bool g_used[10] = {true, true, false, false, false, false, false, false, false, false};bool TryNum(int num[], int index);void fun(){    int num[7];//V, I, N, G, C, Q, E;    if (TryNum(num, 0))    {        printf("\n");        printf("    %d %d %d %d 1 \n", num[0], num[1], num[2], num[3]);        printf("      %d %d %d %d \n", num[4], num[1], num[2], num[5]);        printf("+     %d %d %d %d \n", num[4], num[1], num[2], num[5]);        printf("--------------\n");        printf("  1 0 %d %d 1 %d \n", num[6], num[2], num[6]);    }}bool JudgeResult(const int num[]){    int num1, num2, num3;    num1 = num[0] * 10000 + num[1] * 1000 + num[2] * 100 + num[3] * 10 + 1;    num2 = num[4] * 1000 + num[1] * 100 + num[2] * 10 + num[5];    num3 = 100010 + num[6] * 1001 + num[2] * 100;    return num3 == num1 + num2 * 2;}bool TryNum(int num[], int index){    int i = 0;    for (i=0; i<10; i++)    {        if (!g_used[i])        {            num[index] = i;            if (index < 6)            {                if (TryNum(num, index+1))                    return true;            }            else            {                if (JudgeResult(num))                    return true;            }        }    }    return false;} 


[解决办法]
忘记说了,结果是这个

C/C++ code
/*    8 4 6 8 1       9 4 6 6 +     9 4 6 6 --------------  1 0 3 6 1 3 */
[解决办法]
94851
6483
6483
------
107817
[解决办法]
16楼代码修改
C/C++ code
bool TryNum(int num[], int index){    int i = 0;    for (i=0; i<10; i++)    {        if (!g_used[i])        {            num[index] = i;            g_used[i] = true;            if (index < 6)            {                if (TryNum(num, index+1))                    return true;            }            else            {                if (JudgeResult(num))                    return true;            }            g_used[i] = false;        }    }    return false;}/*    9 4 8 5 1       6 4 8 3 +     6 4 8 3 --------------  1 0 7 8 1 7 */
[解决办法]
C/C++ code
 VINGT  CINQ  CINQ-------TRENTEStep 1:V != 0C != 0T != 0Q != 0N != 0I != 0T = 1-------Step 2: VING1  CINQ  CINQ-------1REN1E(1 + 2Q)%10 = E                        (a)E must be odd        -> E = ?(3, 5, 7, 9)        (b)            if E = 3 => Q = 1         X, becasue T = 1            if E = 5 => Q = 2, 7            if E = 7 => Q = 3, 8            (b1)            if E = 9 => Q = 4(G + 2N)%10 = 1        -> G maybe odd(G + 2N + 1)%10 = 1    -> G maybe even(N + 2I)%10 = N        -> I = 5            (c)(N + 2I + 1)%10 = N       -> should not exist(N + 2I + 2)%10 = N    -> I = 4(I + 2C)%10 = E        -> I maybe odd(I + 2C + 1)%10 = E    -> I maybe even            V = ?(8, 9)R <= 1            -> R = 0            (d)------------------------Step 3: VING1  CINQ  CINQ-------10EN1ESo V = 9, because (I + 2C + carry) < 20Step 4: 9ING1  CINQ  CINQ-------10EN1E(b) refined to: E = ?(5, 7)                (e)N + 2I carries, and the carry must be 1, becuase I = 4 or 5, and N >= 2 (0 and 1 is occupied by R and T respectively)(I + 2C)%10 = E        -> I maybe odd            so, wrong here(I + 2C + 1)%10 = E    -> I maybe even    => I = 4    (f)Step 5: 94NG1  C4NQ  C4NQ-------10EN1E(f) refined to: (5 + 2C)%10 = E?(5, 7)            (g)if E = 5 => C = 5, wrong, because E != C,So, E = 7                        (h)Step 6: 94NG1  C4NQ  C4NQ-------107N17(N + 8 + carry)%10 = N -> carry = 2, that meansG + 2N >= 20 orG + 2N + carry' >= 20according (b1), Q = ?(3, 8),                 (i)so, 1 + 2Q < 20, that means carry' <= 110 <N + 4 + 4 + carry < 20So, 4 + 2C + 1(carry) = 17 => C = 6--------------------------------Step 6: 94NG1  64NQ  64NQ-------107N17 according (i), given Q = 3 => G + 2N = 21 => (N = 8, G = 5) 94851  6483  6483-------107817 ...found....
[解决办法]
探讨
忘记说了,结果是这个 

C/C++ code
/*
8 4 6 8 1 
9 4 6 6
+ 9 4 6 6
--------------
1 0 3 6 1 3 
*/




我只求了一组解,不排除有其他解的可能性

[解决办法]
错误我发现了,修改在20楼。

比较佩服LS的纯人脑推理,我就推了几个数,后面太繁琐了,呵呵。正在研究ls的推理过程
[解决办法]
对,是唯一的,一直在等人回复,我不小心连续回了3个帖
探讨
以上是纯人脑推导过程,找了一组,下面就不推了,没想到一贴出来已经有了答案。

热点排行