基于Visual C++2013拆解世界五百强面试题--题2-输出和为一个给定整数的所有组合

/*

    请用C语言中实现 输出和为一个给定整数的所有组合(可重复如4=2+2)

*/

//1:

#include <stdio.h>   // 包含头文件stdio.h  为程序提供基本输入输出功能 

#include <stdlib.h>   //包含标准库头文件stdlib.h  以便调用函数system("pause") 使程序暂停


int main(void)

{

    int num = 0;    //获取输入的数字 

    int i   = 0;    //外层循环计数 

    int j   = 0;    //内层循环计数


    printf("Please input a number:");

    scanf("%d", &num);

    

    for(i = 1; i <= num / 2; i++)         //i存放1 到 num/2 之间的整数(i <= num/2)

    {

        for(j = num / 2; j < num; j++)    //j 存放 num/2 到 num 之间的整数 (j < num)  

        {

            if(i + j == num)              // num/2 前后两半部分的数相加, 如果和等于num则输出 i, j 

            {

                printf("%d+%d=%d", i, j, num);

                break;                   //退出内层循环,避免不必要的循环次数,提高效率

            }

        }

    }

    return 0;

}


//2:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

void main()
{
unsigned long int num = 0;
scanf("%d", &num);
int mid = 0;
int i;
for (i = 1; i <= num / 2; i++)        //i 存放 1 到 num / 2 之间的整数//i存放1 到 num/2 之间的整数(i <= num/2)
{
mid = num - i;               //mid 得到对应的结果
if (mid != i)                //去掉i = mid相等的情况
{
printf("%d+%d=%d\n", i, mid, num); 
}
}

system("pause");
}


/*

    请用C语言中实现 输出和为一个给定整数的所有组合

    例如 n = 5

    5 = 1 + 4; 5 = 2 + 3;(相加的数不能重复,不考虑负数)

*/


//1:

#include <stdio.h>   // 包含头文件stdio.h  为程序提供基本输入输出功能 

#include <stdlib.h>   //包含标准库头文件stdlib.h  以便调用函数system("pause") 使程序暂停


int main(void)

{

    int num = 0;    //获取输入的数字 

    int i   = 0;    //外层循环计数 

    int j   = 0;    //内层循环计数


    printf("Please input a number:");

    scanf("%d", &num);

    

    for(i = 1; i <= num / 2; i++)         //i存放1 到 num/2 之间的整数(i <= num/2)

    {

        for(j = num / 2 + 1; j < num; j++)    //j 存放 num/2 + 1到 num 之间的整数 (j < num)  

        {

            if(i + j == num)              // num/2 前后两半部分的数相加, 如果和等于num则输出 i, j 

            {

                printf("%d+%d=%d", i, j, num);

                break;                    //退出内层循环,避免不必要的循环次数,提高效率

            }

        }

    }

}


//2:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

void main()
{
unsigned long int num = 0;
scanf("%d", &num);
int mid = 0;
int i;
for (i = 1; i <= num / 2; i++)        //i 存放 1 到 num / 2 之间的整数//i存放1 到 num/2 之间的整数(i <= num/2)
{
mid = num - i;               //mid 得到对应的结果
printf("%d+%d=%d\n", i, mid, num);  //输出所有的结果,包括重复的值
}

system("pause");
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值