数A去掉一个数字后得到B,给出A与B的和N求所有可能的数A
2015-04-04 17:59
253 查看
废话不多说 源代码中有注释
/*
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
/*
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
相关文章推荐
- 1,2,5,10四个基数任意次数组合相加得到一个数N,求所有可能组合
- 1.编写一个简单的C语言程序:根据输入的两个整数求平均值并且在终端输出,通过gcc编译器得到它的汇编程序文件。 2.编写一个C语言程序:打印输出所有“水仙花数”,用gdb调试程序(给出步骤)。所谓“
- 给定一个数字字符串,返回数字可能表示的所有可能的字母组合。数字与字母的对应关系和手机按键对应
- 给定一个单调递增有序数组A,给定一个数字N,试给出一个算法得到A中该数字N出现的次数。
- 给出一个数字m,求满足m = a^3 + b^3(a,b为正整数)的所有整数对(分解素因子防超时)
- 假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作。例如,从1234出发,依次可以得到4321-1234=3087、87
- 四个基数任意次数组合相加得到一个数N,求所有可能组合
- 一个字符数组,里面的字符可能是a-z、A-Z、0-9.现在要求对数组进行排序,要求所有小写字符放在最前面,所有大写字符放在中间,所有数字放在最后,而且各部分内部分别有序。
- 一个字符数组,里面的字符可能是a-z、A-Z、0-9.现在要求对数组进行排序,要求所有小写字符放在最前面,所有大写字符放在中间,所有数字放在最后,而且各部分内部分别有序(创新工场)
- 创建一个包含15个随机整数(0~9)的列表,然后去掉其中的所有重复数字。
- 求出所有满足下列条件的二位数:将此二位数的个位数字与十位数字进行交换,可得到一个新的 数,要求新数与原数之和小于100。
- 顺序输出从1到N位的所有数字(N可能是一个大数位)。
- 是给出一个(1,10000]之间的数字n,让你输出里面所有的完数。
- 给定一个数字列表,返回其所有可能的排列。 注意事项 你可以假设没有重复数字。
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)
- 一个字符数组,里面的字符可能是a-z、A-Z、0-9.现在要求对数组进行排序,要求所有小写字符放在最前面,所有大写字符放在中间,所有数字放在最后,而且各部分内部分别有序(创新工场)
- 给定一个数字字符串,返回数字可能表示的所有可能的字母组合。数字与字母的对应关系和手机按键对应。
- 1.编写一个简单的C语言程序:根据输入的两个整数求平均值并且在终端输出,通过gcc编译器得到它的汇编程序文件。 2.编写一个C语言程序:打印输出所有“水仙花数”,用gdb调试程序(给出步骤)。所谓“
- 一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作。
- 给出几个数字,如何用计算机穷举所有可能的算式,加减乘除括号