C++笔试编程题

1.输入一个有符号整数,输出该整数的反转值。

使用取模运算
一个数除以10取商获取除去个位数剩下的数,而取余就是取它的个位数。 
比如 123456/10 = 12345;123456%10 = 6; 

按照这个思路去拆解这个整数,下面就好做了。

看算法:

#include<iostream>
using namespace std;
int main()
{
    int input;
    cin >> input;
    int output = 0;
    while(input!=0)
    {
        output=output*10+input%10;
        input/=10;
    }
    cout<<output;
}

2.给定整数n,取若干个1到n的整数可求和等于整数m,编程求出所有组合的个数。比如当n=6,m=8时,有四种组合:[2,6], [3,5], [1,2,5], [1,3,4]。限定n和m小于120 

#include <bits/stdc++.h>
using namespace std;
int dp[122][122];
int main(int argc, char *argv[])
{
    int n,m;
    scanf("%d%d",&n,&m);
    memset(dp,0,sizeof(dp));
    //初始化dp
    dp[0][0] = 1;
    for(int k=1;k<=m;++k)
        dp[0][k] = 0;
    for(int k=1;k<=n;++k)
        dp[k][0] = 1;
    //dp[i][j]表示:从1,2,...,i-1,i取若干个整数求和等于整数j的组合的个数
    for(int j=1;j<=m;++j)
        for(int i=1;i<=n;++i)
            if((j-i)>=0)
                dp[i][j] = dp[i-1][j] + dp[i-1][j-i];
            else
                dp[i][j] = dp[i-1][j];
    cout << dp[n][m] << endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/boiled_water123/article/details/82943966
今日推荐