c语言加法填数的输入和提取问题

输入如123+7X9=X56求X=0-9的整数,没有答案时输出NO有且只有一个时输出答案请问提取了X的位置之后如何运算得到答案如何循环放回去穷举有点想不明白,求大神指点格... 输入如 123+7X9=X56

求X=0-9的整数,没有答案时输出NO有且只有一个时输出答案
请问提取了X的位置之后如何运算得到答案
如何循环放回去穷举有点想不明白,求大神指点
格式的话是 数组+数组=数组

输入的话如 13x+x67=x8x7这样也行每组必须有一个X

脑袋有点转不过来

现在还不明白 当x出现多次时如何带入穷举计算
展开
 我来答
songhai911
推荐于2016-11-05 · 超过61用户采纳过TA的回答
知道小有建树答主
回答量:116
采纳率:0%
帮助的人:69.6万
展开全部
把字符串按+,=分成三部分,三个字符串。有两种方法:
方法一:

第一遍弄清有几位数,比如:第一数n1位,第二数n2位,和为n2位.
x从0到9(最高位为x时不能为0), 以123+7x9=x56为例,就是:
1*100+2*10+3+7*100+x*10+9==x*100+5*10+6条件成立,就输出.
1*100+3*10+x+x*100+6*10+7==x*1000+8*100+x*10+7,就输出。

方法二:

但是上述方法,不能确定唯一解。最好的方法是解方程法,如下,以例1为例:
(10-100)x=5*10+6-1*100-2*10-3-7*100-9
得-90x=-776
x无非负整数解,输入“NO”.

再看例2:
(1+100-1000-10)x=800+7-100-30-60-7
得-909x=610
同理,输出NO.
追问
呃请问解方程的代码怎么写因为需要读取X的位置才能确定需要用什么方法解,第一种方法听得有点头绪了,但是第二种方法完全没有看懂的说

求大大原谅我差劲的数学水平···
追答
一句话,把方法一得到的等式合并同类项解方程,就不要穷举了!如你说的13x+x67=x8x7,改写成1*100+3*10+x+100x+6*10+7=1000x+8*100+10x+7,移项得-909x=-560,又是无非负整数解.

已写成以下程序,请下载试试,要完整地写出来还是要花时间呢。

试试以下例子: x20+16x=88x

56x+212=xx9

60x+x1x0=x7xx

2x15+40x1=xx7x


White_MouseYBZ
2014-07-27 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6666万
展开全部
//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
void main(void){
char a[3][11],t[3][11],x,i,j;
printf("Input number1,number2 & number3:\n");
scanf("%s%s%s",a[0],a[1],a[2]);
for(i=0;i<3;strcpy(t[i],a[i++]));
for(x=0;x<10;x++){
for(i=0;i<3;i++)
for(j=0;t[i][j];j++)
if((a[i][j]|0x20)=='x') t[i][j]=x+'0';
if(atoi(t[0])+atoi(t[1])==atoi(t[2]))
break;
}
if(x<10) printf("The number is %d\n",x);
else printf("No such number...\n");
}
追问
谢谢大大的回答,大大可能理解错了,输入的时候是像123+7X9=X56这样直接输入然后需要判断+号和等号来判断数字列的位数,然后计算穷举,现在就是当x出现多次时,重新代入穷举有点不明白
追答
void main(void){
char s[31],a[3][11],t[3][11],x,i,j;
printf("Please enter the expression (without separators):\n");
scanf("%s",s);
for(j=i=0;s[i]!='+';a[0][j]=t[0][j++]=s[i++]);
a[0][j]=t[0][j]='\0';
for(j=0,i++;s[i]!='=';a[1][j]=t[1][j++]=s[i++]);
a[1][j]=t[1][j]='\0';
strcpy(t[2],s+i+1);
strcpy(a[2],s+i+1);
for(x=0;x<10;x++){
for(i=0;i<3;i++)
for(j=0;t[i][j];j++)
if((a[i][j]|0x20)=='x') t[i][j]=x+'0';
if(atoi(t[0])+atoi(t[1])==atoi(t[2]))
break;
}
if(x<10) printf("The number is %d\n",x);
else printf("No such number...\n");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wdghy123
2014-07-27 · TA获得超过1583个赞
知道大有可为答主
回答量:1514
采纳率:95%
帮助的人:734万
展开全部
x代表1位数字的话,就把0-9代入循环就可以了,有能得出结果的就break,没有就是no
关键是那3个数组提取对
追问
呃x可以在任何位置重复出现但是只代表同一个数字0-9,需要读取位置然后用0-9穷举,如果只出现一遍的话好做多了,但是可以出现在任何地方任何次数就有点难做了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式