函数综合练习2639+1088

2639 因数之和为n的最小正数

一个自然数的因数是指能被这个自然数整除的所有自然数。例如6的因数为:1,2,3,6。

现在给出一个数n,求因数之和为n的最小的正数是多少(如果找不到这样的数,输出-1)。

输入
一个数 n(1 <= n <= 10000)

输出

一个数 a

输入样例

6

输出样例

5
#include <iostream>
using namespace std;

int n;

bool isit(int x) {
    int ans = 0;
    for (int i = 1; i <= x; ++i) {
        if (x % i == 0)    ans += i;
    }
    if (ans == n) {
        return true;
    }
    else {
        return false;
    }
}

int main() {
    cin >> n;
    for (int i = 1; i <= n; ++i) {
        if (isit(i)) {
            cout << i << endl;
            return 0;
        }
    }
    cout << -1 << endl;
    
    return 0;
}

1088 最长回文子串

输入一个字符串Str,输出Str里最长回文子串的长度。

回文串:指aba、abba、cccbccc、aaaa这种左右对称的字符串。

串的子串:一个串的子串指此(字符)串中连续的一部分字符构成的子(字符)串
例如 abc 这个串的子串:空串、a、b、c、ab、bc、abc

输入

输入Str(Str的长度 <= 1000)

输出

输出最长回文子串的长度L。

输入样例

daabaac

输出样例

5
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

char str[1010];

bool isit(int l, int r) {
    for (int i = 0; i < (r-l+1)/2; ++i) {
        if (str[l+i] != str[r-i]) {
            return false;
        }
    }
    return true;
}

int main() {
    cin >> str;
    int ans = 0;
    int len = strlen(str);
    for (int i = 0; i < len; ++i) {
        for (int j = i; j < len; ++j) {
            if (isit(i, j)) {
                ans = max(ans, j-i+1);
            }
        }
    }
    
    cout << ans << endl;
    
    return 0;
}

 

posted @ 2021-06-17 13:52  tianluman  阅读(159)  评论(0编辑  收藏  举报