user-0 提问: 请问下面这题用C编程怎么求解。

回复:
user: user-1
content: 4元一次方程,有若干解.

user: user-2
content: 引用 4 楼 u012062607 的回复:[quote=引用 3 楼 derekrose 的回复:] 这还用c语言  a=1 d=9 剩下的自己解方程 答案我知道，1089.我只是想用C来解[/quote]  写代码又不是规定必须遍历之类，为什么不能再草纸上计算。 比如此题，四位数abcd*9=四位数dcba --》abcd <= 1111 --》a = 1，d = 9 --》b只能为0或1，b为1时，c仅仅只能取0（11c9 > 1111）,显然不成立，则b为0 --》10c9   你可以继续推到下去，难道一定要写效率低的代码

user: user-3
content: 如果允许有进位，即限制A，B，C，D都在[0,9]的范围，那么if中加一个条件： （j < 10000）

user: user-3
content: 程序解法： #include <stdio.h> #include <stdlib.h>  void main(void) { 	int i, j;  	for(i=0; i<10000; i++) 	{ 		j = i * 9; 		if(((j % 10) == ((i / 1000) % 10)) 			&& (((j / 10) % 10) == ((i / 100) % 10)) 			&& (((j / 100) % 10) == ((i / 10) % 10)) 			&& (((j / 1000) % 10) == (i % 10))) 		{ 			printf("%d\r\n", i); 		} 	} }  打印出所有小于10000的满足条件的数。

user: user-4
content: #include<stdio.h> int main(){ 	  int x=1111,m,y,i,l=0;  	for( i=1000;i<x;i++){  		y=i*9; 		l=y; 		m=0	;  		while(l){ 		 	m=m*10+l%10; 		 	l=l/10;	 		 		 		 } 		  			if (m==i){ 				printf("%d",y); 			} 	 	 	 } 	return 0; } 我的思路： 值为9999内的一个数反过来等于原数 新手一枚

user: user-5
content: 引用 4 楼 u012062607 的回复:[quote=引用 3 楼 derekrose 的回复:] 这还用c语言  a=1 d=9 剩下的自己解方程 答案我知道，1089.我只是想用C来解[/quote]  效率高的代码，都是经过数学模型优化的。

user: user-6
content: #include <stdio.h> /* ABCD*9 = DCBA =>A=1 D=9 =>BC*9 + 8 = CB */ int main(){  int b, c;  for(b = 0; b < 10, b++){   for(c = 0; c < 10; c++){    if((b * 10 + c) * 9 + 8 == c * 10 + b) printf("%d\n", 1000 + b * 100 + c * 10 + 9);    }  }  return 0; }

user: user-7
content: 引用 2 楼 user-13 的回复:穷举，最简单的4个for循环搞起~为啥不一个for循环直接搞定？

user: user-8
content: 经测试 可以输出1089； #include <stdlib.h> #include <stdio.h> void math(void) { 		int a,b; 		int i,j,k; 		int A[4]={}; 		int B[4]={}; 		for(i=1000;i<2000;i++){//这里的i是个大体的范围 				a = i; 				b = a*9;//这个是满足 ABCD*9=DCBA的关系的 				for(j=0;j<4;j++){//这个循环是取出各位上的数值保存到数组中 						A[j] = a%10; 						a=a/10; 						B[j] = b%10; 						b = b/10; 				} 				for(j=0;j<4;j++)//这个是满足 ABCD*9=DCBA的关系的 						if(A[j] != B[3-j]) break;//如果不满足就跳出来 ； 				if(j==4)//如果 j == 4 说明上面的那个for循环全部执行了；所以此时所有的关系都满足了； 						printf("%d\n",i);//打印出这个数 		} }		  int main(int argc,char *argv[]) { 		math(); }

user: user-9
content: 引用 楼主 u012062607 的回复:已知四位整数ABCD，满足下面关系式：ABCD*9=DCBA，   求ABCD的值。 谢谢各位大神。A是1，D是9，剩下的两层循环，楼上各位大神太给力了！

user: user-10
content: 引用 15 楼 u012062607 的回复:[quote=引用 11 楼 u013235485 的回复:] 对c还在学习阶段，写个c#的，思想差不多，但不是一个好的办法。 将一个值x返转，如1985反转为5891,再看1985*9是否和5891相等。   class Program     {         static int fun(int x)         {             int d = x / 1000;             int c = (x % 1000) / 100;             int b = (x % 1000 % 100) / 10;             int a = x % 1000 % 100 % 10;             return int.Parse(string.Format("{0}{1}{2}{3}",a,b,c,d));         }          static void Main(string[] args)         {             for (int i = 1000; i <= 9999; i++)             {                 if (i * 9 == fun(i))                 {                     Console.WriteLine(i);                     break;                 }             }                }     }  这个看起来很高级的样子，不怎么看得懂。[/quote]  哥们，你腹黑啊。。

user: user-0
content: 引用 11 楼 u013235485 的回复:对c还在学习阶段，写个c#的，思想差不多，但不是一个好的办法。 将一个值x返转，如1985反转为5891,再看1985*9是否和5891相等。   class Program     {         static int fun(int x)         {             int d = x / 1000;             int c = (x % 1000) / 100;             int b = (x % 1000 % 100) / 10;             int a = x % 1000 % 100 % 10;             return int.Parse(string.Format("{0}{1}{2}{3}",a,b,c,d));         }          static void Main(string[] args)         {             for (int i = 1000; i <= 9999; i++)             {                 if (i * 9 == fun(i))                 {                     Console.WriteLine(i);                     break;                 }             }                }     }  这个看起来很高级的样子，不怎么看得懂。

user: user-0
content: 引用 12 楼 movsd 的回复:[quote=引用 9 楼 u012062607 的回复:] #include<stdio.h> void main() { 	int a[10]={0,1,2,3,4,5,6,7,8,9};     int b[10]={0,1,2,3,4,5,6,7,8,9}; 	int c[10]={0,1,2,3,4,5,6,7,8,9}; 	int d[10]={0,1,2,3,4,5,6,7,8,9}; 	int x,y,i,j,k,l; 	i=0;j=0;k=0;l=0;     for(;i<10;i++) 		for(;j<10;j++) 			for(;k<10;k++) 				for(;l<10;l++) 				{ 					 x=1000*a[i]+100*b[j]+10*c[k]+d[l];                                          y=1000*d[l]+100*c[k]+10*b[j]+a[i]; 					 if(y==9*x&&x!=0) 						 printf("%d\n",x); 				}	 }  为什么这个程序不行啊。 没有输出， 把循环变量的初始化写在for里面。[/quote] 谢谢，问题解决了。

user: user-0
content: 引用 10 楼 u012915226 的回复:[quote=引用 9 楼 u012062607 的回复:] [quote=引用 8 楼 user-13 的回复:] for(i = 0; i < 10; i++)   for(j = 0; j < 10; j++)      if((1000+i*100+j*10+9)*9 == 9000+j*100+i*10 +1)           printf("%d,%d",i,j);  #include<stdio.h> void main() { 	int a[10]={0,1,2,3,4,5,6,7,8,9};     int b[10]={0,1,2,3,4,5,6,7,8,9}; 	int c[10]={0,1,2,3,4,5,6,7,8,9}; 	int d[10]={0,1,2,3,4,5,6,7,8,9}; 	int x,y,i,j,k,l; 	i=0;j=0;k=0;l=0;     for(;i<10;i++) 		for(;j<10;j++) 			for(;k<10;k++) 				for(;l<10;l++) 				{ 					 x=1000*a[i]+100*b[j]+10*c[k]+d[l];                                          y=1000*d[l]+100*c[k]+10*b[j]+a[i]; 					 if(y==9*x&&x!=0) 						 printf("%d\n",x); 				}	 } 为什么这个程序不行啊。 没有输出，[/quote]你那连续4个for 是要做肾  看起来怪怪的[/quote] 四位数，所以用四个for循环确定，

user: user-11
content: 引用 9 楼 u012062607 的回复:#include<stdio.h> void main() { 	int a[10]={0,1,2,3,4,5,6,7,8,9};     int b[10]={0,1,2,3,4,5,6,7,8,9}; 	int c[10]={0,1,2,3,4,5,6,7,8,9}; 	int d[10]={0,1,2,3,4,5,6,7,8,9}; 	int x,y,i,j,k,l; 	i=0;j=0;k=0;l=0;     for(;i<10;i++) 		for(;j<10;j++) 			for(;k<10;k++) 				for(;l<10;l++) 				{ 					 x=1000*a[i]+100*b[j]+10*c[k]+d[l];                                          y=1000*d[l]+100*c[k]+10*b[j]+a[i]; 					 if(y==9*x&&x!=0) 						 printf("%d\n",x); 				}	 }  为什么这个程序不行啊。 没有输出， 把循环变量的初始化写在for里面。

user: user-10
content: 对c还在学习阶段，写个c#的，思想差不多，但不是一个好的办法。 将一个值x返转，如1985反转为5891,再看1985*9是否和5891相等。   class Program     {         static int fun(int x)         {             int d = x / 1000;             int c = (x % 1000) / 100;             int b = (x % 1000 % 100) / 10;             int a = x % 1000 % 100 % 10;             return int.Parse(string.Format("{0}{1}{2}{3}",a,b,c,d));         }          static void Main(string[] args)         {             for (int i = 1000; i <= 9999; i++)             {                 if (i * 9 == fun(i))                 {                     Console.WriteLine(i);                     break;                 }             }                }     }

user: user-12
content: 引用 9 楼 u012062607 的回复:[quote=引用 8 楼 user-13 的回复:] for(i = 0; i < 10; i++)   for(j = 0; j < 10; j++)      if((1000+i*100+j*10+9)*9 == 9000+j*100+i*10 +1)           printf("%d,%d",i,j);  #include<stdio.h> void main() { 	int a[10]={0,1,2,3,4,5,6,7,8,9};     int b[10]={0,1,2,3,4,5,6,7,8,9}; 	int c[10]={0,1,2,3,4,5,6,7,8,9}; 	int d[10]={0,1,2,3,4,5,6,7,8,9}; 	int x,y,i,j,k,l; 	i=0;j=0;k=0;l=0;     for(;i<10;i++) 		for(;j<10;j++) 			for(;k<10;k++) 				for(;l<10;l++) 				{ 					 x=1000*a[i]+100*b[j]+10*c[k]+d[l];                                          y=1000*d[l]+100*c[k]+10*b[j]+a[i]; 					 if(y==9*x&&x!=0) 						 printf("%d\n",x); 				}	 } 为什么这个程序不行啊。 没有输出，[/quote]你那连续4个for 是要做肾  看起来怪怪的

user: user-0
content: 引用 8 楼 user-13 的回复:for(i = 0; i < 10; i++)   for(j = 0; j < 10; j++)      if((1000+i*100+j*10+9)*9 == 9000+j*100+i*10 +1)           printf("%d,%d",i,j);  #include<stdio.h> void main() { 	int a[10]={0,1,2,3,4,5,6,7,8,9};     int b[10]={0,1,2,3,4,5,6,7,8,9}; 	int c[10]={0,1,2,3,4,5,6,7,8,9}; 	int d[10]={0,1,2,3,4,5,6,7,8,9}; 	int x,y,i,j,k,l; 	i=0;j=0;k=0;l=0;     for(;i<10;i++) 		for(;j<10;j++) 			for(;k<10;k++) 				for(;l<10;l++) 				{ 					 x=1000*a[i]+100*b[j]+10*c[k]+d[l];                                          y=1000*d[l]+100*c[k]+10*b[j]+a[i]; 					 if(y==9*x&&x!=0) 						 printf("%d\n",x); 				}	 } 为什么这个程序不行啊。 没有输出，

user: user-13
content: for(i = 0; i < 10; i++)   for(j = 0; j < 10; j++)      if((1000+i*100+j*10+9)*9 == 9000+j*100+i*10 +1)           printf("%d,%d",i,j);

user: user-0
content: 引用 6 楼 user-13 的回复:[quote=引用 3 楼 derekrose 的回复:] 这还用c语言  a=1 d=9 剩下的自己解方程 +1 我想问下楼主是学什么的[/quote] 刚刚学C，学生一枚。