码迷,mamicode.com
首页 > 其他好文 > 详细

数A去掉一个数字后得到B,给出A与B的和N求所有可能的数A

时间:2015-04-04 18:26:03      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:cpp   算法   

废话不多说  源代码中有注释

/*
	File : ABN.c
	Date : 2015/4/4
	version : 1.0
	platform : windows 7 x86_64
	Function : 
	A + B = N
	1 <= N <= 10^9
	B 是A去掉一个数字后得到
	例如 A + B = 34
	A可以是27或31

	特例:
	12 = 11 + 1  会执行两次  11 十位个位一样,去掉十位和个位一样。
	故可以用一个数组保存结果最后输出。
*/

#include <stdio.h>

int main(int argc , char *argv[])
{
	int arr[10] = {0 , };
	int nSrc , nChg , nRes;
	int j;
	scanf("%d" , &nRes);
	if(nRes <= 10)
	{
		printf("%d\n" , nRes);
		return 0;
	}
	for(nSrc = 10; nSrc <= nRes; ++nSrc)
	{
		int nTmp = nSrc , nIndex;
		/*
			初始化数组
		*/
		for(j = 9; nTmp > 0 && j >= 0; --j)
		{
			arr[j] = nTmp % 10;
			nTmp /= 10;
		}
		/*
			保存索引
		*/
		nIndex = j + 1;
		/*
			对数组每一元素处理  8765
		*/
		for(j = 9 ; j >= nIndex; --j)
		{
			nChg = 0;
			for(nTmp = nIndex; nTmp <= 9; ++nTmp)
			{
				if(nTmp != j)
				{
					nChg = nChg * 10 + arr[nTmp];  
				}
			}
			if(nChg + nSrc == nRes)
			{
				printf("%d + %d = %d\n" , nSrc , nChg , nRes);
			}
		}
		
		/*
			还原数组值供下一次循环使用
		*/
		for(j = 0; j < 10; ++j)
		{
			arr[j] = 0;
		}
	}
	return 0;
}
运行结果

87654
78827 + 8827 = 87654
79677 + 7977 = 87654
79686 + 7968 = 87654
79687 + 7967 = 87654
79692 + 7962 = 87654
79727 + 7927 = 87654
79827 + 7827 = 87654
83827 + 3827 = 87654

34
27 + 7 = 34
31 + 3 = 34
32 + 2 = 34

数A去掉一个数字后得到B,给出A与B的和N求所有可能的数A

标签:cpp   算法   

原文地址:http://blog.csdn.net/u011185633/article/details/44874423

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!