Здравствуйте, Apapa, Вы писали:
A>Недавно был в отпуске!
A>Вот сочинение на тему отпуска:
A>Apapa — RSDN = Sad
Одинаковым буквам соответствуют одинаковые цифры, разным — разные...
Apapa - RSDN = Sad
10101 - 9583 = 518
Здравствуйте, Apapa, Вы писали:
A>Недавно был в отпуске!
A>Вот сочинение на тему отпуска:
A>Apapa — RSDN = Sad
Отсюда получаем:
Apapa = RSDN + Sad
Здравствуйте, Pushkin, Вы писали:
P>
Что за программка?
Brute force?
Здравствуйте, UgN, Вы писали:
UgN>Что за программка?
UgN>Brute force?
Smart force
Перебор, конечно, надо просто организовать его аккуратненько
Здравствуйте, Pushkin, Вы писали:
UgN>Что за программка?
UgN>Brute force?
P>Smart force
P>Перебор, конечно, надо просто организовать его аккуратненько
Выкладывай.
Чем больше кода в этом форуме, тем тошнее его врагам!
Здравствуйте, UgN, Вы писали:
UgN>Выкладывай.
UgN>Чем больше кода в этом форуме, тем тошнее его врагам!
Хорошо, токо чур не пинать — писал в выходной, а за окном светило солнышко
// Rebus.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
template<class T>
void Swap(T& i1,T& i2)
{
T t=i1;
i1=i2;
i2=t;
}
template<class T>
void Sort(T* var,int n) //да, пузырьком, имею право :)
{
for(int i=0;i<n-1 ;i++)
for(int j=0;j<n-1-i;j++)
if(var[j]>var[j+1])
Swap(var[j],var[j+1]);
}
void main() { while(1)
{
printf("\7\n");
char s[80];
gets(s);
char letter[11]={0},sign=0,eq=0;
for(char* ss=s;*ss;ss++)
{
if(*ss=='+' || *ss=='-'|| *ss=='*' || *ss=='/')
sign=*ss;
else if(*ss=='=')
eq=1;
else if(!strchr(letter,*ss))
strncat(letter,ss,1);
}
int np=strlen(letter);
if(np>10 || !np || !sign || !eq)
continue;
//далее идёт перебор всевозможных групп из np неповторяющихся цифр
int var[10];
for(int p=0;p<10;p++)
var[p]=p;
while(p>=0)
{
//сейчас в var лежит очередная воможная комбинация - проверяем
char scopy[80];
strcpy(scopy,s);
//готовим замену
char d[256]={0},i=0;
for(ss=letter;*ss;ss++)
d[(unsigned char)(*ss)]='0'+var[i++];
//заменяем буквы на цифры
for(ss=scopy;*ss;ss++)
if(*ss!=sign && *ss!='=')
*ss=d[*ss];
char* s1=scopy;
char* s2=strchr(s1,sign); *(s2++)=0;
char* s3=strchr(s2,'='); *(s3++)=0;
if(s1[0]!='0' && s2[0]!='0' && s3[0]!='0')
if( sign=='+' && atoi(s1)+atoi(s2)==atoi(s3) ||
sign=='-' && atoi(s1)-atoi(s2)==atoi(s3) ||
sign=='*' && atoi(s1)*atoi(s2)==atoi(s3) ||
sign=='/' && atoi(s1)/atoi(s2)==atoi(s3) )
printf("%s%c%s=%s\n",s1,sign,s2,s3);
//конец обработки очередного варианта ///////////////////////
int m=0;
for(p=9;p>=0;m=__max(m,var[p]),p--)
if(p<np && var[p]<m)
{
int p1=p,p2;
for(m=10,p++;p<10;p++)
if(var[p]>var[p1] && var[p]<m)
{
p2=p;
m=var[p];
}
Swap(var[p1],var[p2]);
Sort(var+p1+1,10-p1-1);
break;
}
}
}}
Привет, Pushkin!
Весь день сегодня что-то с интернетом...
P>
Имелось в виду конечно последнее решение, но...
остальные
Я даже решил, что надо было поставить задачу таким образом:
Apapa — rsdn = sad
с учетом регистра (10707 — 9834 = 873) и без (10101 — 9583 = 518)!