精华内容
下载资源
问答
  • 编程题#1:苹果和虫子 来源: POJ (Coursera声明:在POJ上完成...虫子每x小时能吃掉个苹果,假设虫子在吃完个苹果之前不会吃另个,那么经过y小时你还有多少个完整苹果? 输入 输入仅行,包括n,x和y(均为...

    编程题#1:苹果和虫子
    来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)

    注意: 总时间限制: 1000ms 内存限制: 65536kB

    描述
    你买了一箱n个苹果,很不幸的是买完时箱子里混进了一条虫子。虫子每x小时能吃掉一个苹果,假设虫子在吃完一个苹果之前不会吃另一个,那么经过y小时你还有多少个完整的苹果?

    输入
    输入仅一行,包括n,x和y(均为整数)。

    输出
    输出也仅一行,剩下的苹果个数

    提示
    注意:是要求完整的苹果数。

    #include <iostream>
    using namespace std;
    int n, x, y;
    int main() {
    	cin >> n >> x >> y;
    	if (y / x >= n) {
    		cout << 0 << endl;
    	}
    	else {
    		if (y % x == 0) {
    			cout << n - y / x << endl;
    		}
    		else {//若不能整除,则多减去一个。
    			cout << n - y / x - 1 << endl;
    		}
    	}
        return 0;
    }
    

    编程题#3:最高的分数
    来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)

    注意: 总时间限制: 1000ms 内存限制: 65536kB

    描述
    孙老师讲授的《计算概论》这门课期中考试刚刚结束,他想知道考试中取得的最高分数。因为人数比较多,他觉得这件事情交给计算机来做比较方便。你能帮孙老师解决这个问题吗?

    输入
    输入两行,第一行为整数n(1 <= n < 100),表示参加这次考试的人数.第二行是这n个学生的成绩,相邻两个数之间用单个空格隔开。所有成绩均为0到100之间的整数。

    输出
    输出一个整数,即最高的成绩。

    #include <iostream>
    using namespace std;
    int n;
    int score[100];
    int main() {
    	cin >> n;
    	for (int i = 0; i < n; i++) {
    		cin >> score[i];
    	}
    	for (int i = 0; i < n; i++) {//冒泡略麻烦,可以直接比较大小替换max
    		for (int j = 0; j < n - i - 1; j++) {
    			if (score[j + 1] > score[j]) {
    				int tmp = score[j];
    				score[j] = score[j + 1];
    				score[j + 1] = tmp;
    			}
    		}
    	}
    	cout << n << "个人中最高分为:" << score[0] << endl;
    }
    

    编程题#4:最大奇数与最小偶数之差的绝对值
    来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)

    注意: 总时间限制: 1000ms 内存限制: 65536kB

    描述
    输入6个正整数,且这6个正整数中至少存在一个奇数和一个偶数。

    设这6个正整数中最大的奇数为a,最小的偶数为b,求出|a-b|的值

    输入
    输入为一行,6个正整数,且6个正整数都小于100

    输入保证这6个数中至少存在一个奇数和一个偶数

    输出
    输出为一行,输出最大的奇数与最小的偶数之差的绝对值

    思路:1. 不分奇偶直接冒泡降序排序
    2. 找出第一个奇数和最后一个偶数,求差

    #include <iostream>
    using namespace std;
    int main() {
    	int f[6];
    	for (int i = 0; i < 6; i++) {
    		cin >> f[i];
    	}
    	for (int i = 0; i < 6; i++) {
    		for (int j = 0; j < 6 - i - 1; j++) {
    			if (f[j + 1] > f[j]) {
    				int tmp = f[j];
    				f[j] = f[j + 1];
    				f[j + 1] = tmp;
    			}
    		}
    	}
    	int a = 0;
    	for (int i = 0; i < 6; i++) {
    		if (f[i] % 2 != 0) {
    			a = f[i];
    			break;
    		}
    	}
    	int b = 0;
    	for (int j = 5; j >= 0; j--) {
    		if (f[j] % 2 == 0){
    			b = f[j];
    			break;	
    		}
    	}
    	if(a-b > 0)
    	    cout << a - b << endl;
    	else
    	    cout << b - a << endl;	
    }
    

    编程题#5:分离整数的各个数位
    来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)

    注意: 总时间限制: 1000ms 内存限制: 65536kB

    描述
    从键盘输入一个任意的三位整数,要求正确地分离出它的百位、十位和个位数,并分别在屏幕上输出,输出采用每行输出一个数的方式,不带其它符号。

    输入
    一个任意的三位整数

    输出
    一个任意的三位整数

    #include <iostream>
    using namespace std;
    int main() {
    	int n;
    	cin >> n;
    	int a = n / 100;
    	int b = (n - 100 * a) / 10;
    	int c = n - 100 * a - 10 * b;
    	cout << "百位为:" << a << "\n" << "十位为:" << b << "\n" << "个位为:" << c << endl;
    }
    
    展开全文
  • 5. 最长回文子串题目描述:给定个字符串 s,找到 s 中最长...输出: "bb"思路:第种思路:以每个字母为回文中心,考虑回文长度为奇数和偶数的情况.第二种思路:以每个字母为回文串结束标志,分别考虑可能回文为奇数和...

    3bbca2678dfecedbe90c587a8f428166.png

    5. 最长回文子串

    题目描述:

    给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

    示例:

    示例 1:

    输入: "babad"
    输出: "bab"
    注意: "aba" 也是一个有效答案。

    示例 2:

    输入: "cbbd"
    输出: "bb"

    思路:

    第一种思路:

    以每个字母为回文中心,考虑回文长度为奇数和偶数的情况.

    第二种思路:

    以每个字母为回文串的结束标志,分别考虑可能回文为奇数和偶数的情况.

    第三种思路:

    dp[j][i]从字符串ji是否为回文串

    动态回归方程 dp[j][i]是看j+1i-1是否为回文串.

    代码:

    第一种思路:

    class Solution:
        def longestPalindrome(self, s):
            """
            :type s: str
            :rtype: str
            """
            self.start = 0
            self.max_len = 0
            n = len(s)
            if n < 2:
                return s
    
            def helper(i, j):
                while i >= 0 and j < n and s[i] == s[j]:
                    i -= 1
                    j += 1
    
                if self.max_len < j - i - 1:
                    # print(i,j)
                    self.max_len = j - i - 1
                    self.start = i + 1
    
            for k in range(n):
                #print(k)
                helper(k, k)
                helper(k, k + 1)
            return s[self.start:self.start + self.max_len ]

    第二种思路:

    class Solution(object):
        def longestPalindrome(self, s):
            """
            :type s: str
            :rtype: str
            """
            n = len(s)
            if n < 2 or s == s[::-1]:
                return s
            max_len = 1
            start = 0
            for i in range(1,n):
                even = s[i-max_len:i+1]
                odd = s[i-max_len-1:i+1]
                if i-max_len-1>=0 and odd == odd[::-1]:
                    start = i-max_len-1
                    max_len += 2
                    continue
                if i-max_len>=0 and even == even[::-1]:
                    start = i-max_len
                    max_len += 1
            return s[start:start+max_len]

    第三种思路:

    迭代:

    class Solution(object):
        def longestPalindrome(self, s):
             n = len(s)
            dp = [[0] * n for _ in range(n)]
            max_len = float("-inf")
            res = ""
            for i in range(n):
                # dp[i][i] = 1
                for j in range(i, -1, -1):
                    if s[i] == s[j] and (i - j < 2 or dp[i - 1][j + 1]):
                        dp[i][j] = 1
    
                    if dp[i][j] and i - j + 1 > max_len:
    
                        max_len = i - j + 1
                        res = s[j:i + 1]
            # print(dp)
            return res

    516. 最长回文子序列

    题目描述:

    给定一个字符串s,找到其中最长的回文子序列。可以假设s的最大长度为1000

    示例:

    输入:

    "bbbab"

    输出:

    4

    一个可能的最长回文子序列为 "bbbb"。

    示例 2: 输入:

    "cbbd"

    输出:

    2

    一个可能的最长回文子序列为 "bb"。

    思路:

    和上一题的思路3一样

    可以用迭代,

    可以用递归

    代码:

    迭代

    class Solution:
        def longestPalindromeSubseq(self, s: str) -> int:
            n = len(s)
            dp = [[0] * n for _ in range(n)]
    
            for i in range(n):
                dp[i][i] = 1
                for j in range(i - 1, -1, -1):
                    if s[i] == s[j]:
                        dp[i][j] = dp[i - 1][j + 1] + 2
                    else:
                        dp[i][j] = max(dp[i][j + 1], dp[i - 1][j])
            return dp[n - 1][0]

    递归

    class Solution:
        def longestPalindromeSubseq(self, s: str) -> int:
            lookup = {}
    
            def helper(i, j):
                if i > j:
                    return 0
                if i == j: return 1
                if (i, j) in lookup:
                    return lookup[(i, j)]
                if s[i] == s[j]:
                    lookup[(i, j)] = helper(i + 1, j - 1) + 2
                else:
                    lookup[(i, j)] = max(helper(i + 1, j), helper(i, j - 1))
                return lookup[(i, j)]
    
            return helper(0, len(s) - 1)

    647. 回文子串

    题目描述:

    给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。

    具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串

    示例:

    示例 1:

    输入: "abc"
    输出: 3
    解释: 三个回文子串: "a", "b", "c".

    示例 2:

    输入: "aaa"
    输出: 6
    说明: 6个回文子串: "a", "a", "a", "aa", "aa", "aaa".

    注意:

    1. 输入的字符串长度不会超过1000。

    思路:

    和上面一样

    代码:

    思路1

    class Solution:
        def countSubstrings(self, s: str) -> int:
            n = len(s)
            self.res = 0
    
            def helper(i, j):
                while i >= 0 and j < n and s[i] == s[j]:
                    self.res += 1
                    i -= 1
                    j += 1
    
            for i in range(n):
                helper(i, i)
                helper(i, i + 1)
            return self.res

    思路2

    class Solution:
        def countSubstrings(self, s: str) -> int:
            n = len(s)
            dp = [[0] * n for _ in range(n)]
            res = 0
            for i in range(n):
                for j in range(i, -1, -1):
                    if s[i] == s[j] and (i - j + 1 <= 2 or dp[i - 1][j + 1]):
                        #print(i,j)
                        dp[i][j] = 1
                    if dp[i][j]:res += 1
            return res

    730. 统计不同回文子字符串

    题目描述:

    给定一个字符串 S,找出 S 中不同的非空回文子序列个数,并返回该数字与 10^9 + 7的模。

    通过从 S 中删除 0 个或多个字符来获得子字符序列。

    如果一个字符序列与它反转后的字符序列一致,那么它是回文字符序列。

    如果对于某个 iA_i != B_i,那么 A_1, A_2, ...B_1, B_2, ... 这两个字符序列是不同的。

    示例:

    示例 1:

    输入:
    S = 'bccb'
    输出:6
    解释:
    6 个不同的非空回文子字符序列分别为:'b', 'c', 'bb', 'cc', 'bcb', 'bccb'。
    注意:'bcb' 虽然出现两次但仅计数一次。

    示例 2:

    输入:
    S = 'abcdabcdabcdabcdabcdabcdabcdabcddcbadcbadcbadcbadcbadcbadcbadcba'
    输出:104860361
    解释:
    共有 3104860382 个不同的非空回文子字符序列,对 10^9 + 7 取模为 104860361。

    提示:

    • 字符串 S 的长度将在[1, 1000]范围内。
    • 每个字符 S[i] 将会是集合 {'a', 'b', 'c', 'd'} 中的某一个。

    思路:

    前面题的加强版

    代码:

    class Solution:
        def countPalindromicSubsequences(self, S: str) -> int:
            from collections import defaultdict
            import bisect
            M = 1000000007
            characters = defaultdict(list)
            for idx, s in enumerate(S):
                characters[s].append(idx)
            lookup = {}
            def helper(i, j):
                if i >= j: return 0
                if (i, j) in lookup:
                    return lookup[(i, j)]
                res = 0
                for c, v in characters.items():
                    # print(c)
                    n = len(v)
                    new_i = None
                    new_j = None
                    idx_i = bisect.bisect_left(v,i)
                    if idx_i < n:
                        new_i = v[idx_i]
                    if new_i == None or new_i >= j: continue
                    idx_j = bisect.bisect_left(v,j)-1
                    new_j = v[idx_j]
                    res += helper(new_i + 1, new_j) + 2 if new_i != new_j else 1
                lookup[(i, j)] = res % M
                return lookup[(i, j)]
            return helper(0, len(S))
    展开全文
  • 1,非递归思路:至少要隔个数字,所以将他们分为奇数和偶数位,然后分别在计算和时候和前奇/偶值求最大值,因为奇数偶数天然分开,求到奇数位的最大时候拿它和前偶数位比较。 2. 递归思路:...

    题目:在数组中,取数字来求和,求最大值多少。(要求:取的数字不能够相邻)

    思路:
    1,非递归思路:至少要隔一个数字,所以将他们分为奇数和偶数位,然后分别在计算和的时候是和前一个的奇/偶的值求最大值,因为奇数偶数天然分开的,求到奇数位的最大和的时候拿它和前一个偶数位比较。
    2. 递归思路:f(n)=f(n-2)+a[n] 与 f(n-1) 的最大值。
    好了,递归思路出来了用循环来做。

    代码:

    class Solution {
    public:
        int rob(vector<int>& nums) {
          
            int n=nums.size();
            int tmp1,tmp2;
            tmp1=tmp2=0;
            for(int i=0;i<n;++i)
            {
                if(i%2==0)
                   tmp1=max(tmp1+nums[i],tmp2);         //表示在前面这段当中最大值。
                else
                    tmp2=max(tmp2+nums[i],tmp1);        //奇偶是天然隔开的
            }
            return tmp1>tmp2? tmp1:tmp2;
        }
    };
    

    代码二:

    class Solution {
    public:
        int rob(vector<int>& nums) {
            const int n = nums.size();
            if (n == 0) return 0;
            if (n == 1) return nums[0];
            if (n == 2) return max(nums[0], nums[1]);
            vector<int> f(n, 0);
            f[0] = nums[0];
            f[1] = max(nums[0], nums[1]);
            for (int i = 2; i < n; ++i)
                f[i] = max(f[i-2] + nums[i], f[i-1]);
            return f[n-1];
        }
    };
    
    展开全文
  • 对于个由N个整数组成数组,需要比较多少次才能把最大和最小数找出来呢? 解法:最简单的是扫描遍数组,需要比较2*N次才能求解。 解法二:首先在概念上把连个相邻数分在同一组,只是想象而已,无须任何...

    对于一个由N个整数组成的数组,需要比较多少次才能把最大和最小的数找出来呢?

    解法:最简单的是扫描一遍数组,需要比较2*N次才能求解。

    解法二:首先在概念上把连个相邻的数分在同一组,只是想象而已,无须任何操作。然后比较同一组的奇数位数字和偶数位数字,将较大的数放在偶数位上,较小的数放在奇数位上。N/2次比较久可以调好。然后求出偶数位上的Max,和奇数位上的Min,各须比较N/2次。总共须比较1.5*N次。  若不破坏原数组,只需用两个变量Max和Min来存储当前的最大值和最小值,当比较完奇数位和偶数位上的数字后,不调整位置,直接再和当前Max和当前Min比。整个过程仍比较1.5*N次。

    解法三:利用分治思想。分别求出前后N/2个数的Min和Max,然后去较小的Min,较大的Max即可。比较次数为1.5*N-2.

    转载于:https://www.cnblogs.com/wen-ge/p/4106997.html

    展开全文
  • 对于个由N个整数组成数组,需要比较多少次才能把最大值和最小值数找出来呢? 问题分析: 输入:个有限长度且为N数组。 输出:该数组的最大值max和最小值min。 特点:最大值和最小值都要找到,可以考虑...
  • 最大最小公倍数

    2020-07-16 19:17:42
    蓝桥杯基础算法之最大最小公倍数 题目 已知一个正整数N,问从1~N中任选出三个数,他们最小公倍数最大可以为...主要找三个数,这三个数主要考虑第一位与第三位之间公约数问题 N分为奇数和偶数讨论 奇数下 所求 = N *
  • 解题思路:如果不懂可以问,讨论...//pos表示当前位,pre表示前一位的是多少,parity表示该位是奇数位还是偶数位,jud表示是否有前导零,board前面那一位是否是最大值 int DP(int pos,int pre,int parity,bool jud
  • 需要最后每一位是偶数,问需要加(或减)多少次 破题: 找到一个数离它最近一位是偶数的数,思路很简单 这种数学题最适合举例子找思路 如:355 从最高位开始,‘3’,则已经限定了范围(无非在比它...
  • 0、在个由n个元素组成集合中,第i个顺序统计量该集合中第i小元素 1、中它所在集合“中点元素”;当n为奇数时,中唯一,出现在i=(n+1)/2处;当n为偶数时,存在两个中数,分别出现在i=n/2...
  • 习题集

    2020-09-11 21:31:33
    问奇数位的最大是多少? 思路:首先翻转必然是选择偶数个数,不然对答案无影响。 对答案产生影响只有两种情况,种是偶数位和前面奇数,另种是偶数位和后面奇数产生影响。 然后就变成了最大连续子段...
  • 题目大意:就算给你序列,按照顺序出若干个数组成个的序列,然后对这个序列定义个权值就算奇数位置的和减去偶数位置的和,问你能的到的最大的权值是多少? **a1 - a2 + a3 - a4 + a5 … ** 解题思路:1.就是...
  • arc 092 E Both Sides Merger

    2018-06-19 23:35:11
    题意:给定个序列,我们有两种操作,第种:把第个或者最后个元素删除,第二种:把2~n-1中某个元素替换成它两边元素和,操作到最后会剩个元素,求这个元素的最大是多少。 首先观察到个性质,第...
  • 题意:给定一个长度为偶数的数,输出小于它的最大的美丽数。如果一个数长度为偶数,且没有前导零...3、从最右边一位依次往左枚举,当逐渐减小第i位时,统计目前的数中,第i位之前有多少个数字奇数个,记为cnt。 4...
  • 題目大意是給定个数,每次只能加一或是减,用最少次数将其变成个每数都是偶数的数,求这个次数是多少 解法 小数据集可以暴力求解,尝试加和减两个方向,直至有个方向达到要求 考虑个数中存在为奇数...
  • Codeforces Round #703 (Div. 2) D. Max Median

    千次阅读 2021-02-19 02:34:04
    现在求所有长度不小于k子区间,中的最大是多少。 思路:首先要想到,对于个中数,在这题中,对于偶数长度,取数是靠左边那个,那么大于等于中就有一半以上。 所以大于等于中个数...
  • 题意:给你一个很大的数,问你小于该数的最大的优美数是多少(优美数:每一位上出现的数字都出现偶数次) 题解:直接从最后一位开始让该位减一(直到该位减到0),判断前边与后边加上该位是否符合题意,若不符合,...
  • 开始,小 X 想研究个序列的所有区间中,中最大的区间个。 后来他想了想觉得太简单了,于是决定把这个问题加大一点难度:小 X 现在想知道有多少区间的中数位于他给定的 [l1, r1] 之间。 后来他想了...
  • 开始,小 X 想研究个序列的所有区间中,中最大的区间个。 后来他想了想觉得太简单了,于是决定把这个问题加大一点难度:小 X 现在想知道有多少区间的中数位于他给定的 [l1, r1] 之间。 后来他想了...
  • CCF 201903-1 小中大

    2019-07-21 17:43:40
    n为偶数时最中间两个数平均值就是中位数,最中间两个数和为偶数时,和除以2自然是整数,当和是奇数时,中位数就是小数,结果自然是多少点五,将结果四舍五入保留一位小数即可。 #include <iostrea...
  • 其实你只用维护个奇数出现次数的最大值,次大值,偶数位出现次数的最大值,次大值即可。 #include &amp;lt;cstdio&amp;gt; #include &amp;lt;cstring&amp;gt; #include &amp;...
  •  这个有名的难题即任一大于2的偶数都可写成两个素数之和,当然猜想本身不是我要讨论的话题,我只是借此想要说明个问题,即便我们表面觉得是一个应该成立的猜想,即便是一个已经通过超级计算机算出了不知多少位数...
  • 如果先手者和后手者都使用最优策略,最后先手者和后手者分别能够取得总石子数分别是多少。对于个栈,取法唯一, 对双端队列,长度为奇数取法唯一,否则先手可以取走max(所有奇数,所有偶数位)1. 1 2 0 4 3 ...
  • BZOJ 3758 数数 分块打表

    千次阅读 2014-11-27 20:07:26
    题目大意:定义一个数完美,当且仅当这个数一位可以分成两个集合,使这两个集合之和相等,求[a,b]区间内有多少个数完美 数位DP?……不大好搞 分块打表大法好! 首先考虑验证一个数是不是完美...
  • 面试题12:打印1到最大的n位数:该题的要点注意输入的n位数是否会导致溢出,因此利用字符串模拟整数的加法。注意:在打印函数中,需要判断打印的数字是否以0开头的,同时判断条件 num[i] != "0",不能写作 num...
  • Codeforces Round #288 (Div. 2)

    千次阅读 2015-01-30 23:00:15
    学长让去做CF的题,就把前几天的那场做了两道。 508A - Pasha and Pixels: 给出n*m的像素,每次选块,变成黑色,判断有没有出现2*2的黑像素,输出第几次出现的。...输入个奇数,输出交换两最大的偶数,没有
  • 中有多少0,做法看1到N之中有多少个5,就有多少个零,因为10=2⋅510=2\cdot 510=2⋅5,又因为2的数量多(偶数出现)。 在本题中也这个思路,不过,对bbb进行质因数分解后,不能贸然选取最大的质因数,因为...
  • POJ 2181 JUMPING COWS(DP)

    2011-08-19 20:01:51
    题意:给你一些数,让你找出个子序列,子序列计算规则:奇数相加偶数位相减。要求这个子序列计算最大多少 思路:开始开了两个数组计算然后超时了……..对这个数列画出图可以看到遇到波峰就相加...
  • 每个人到来时看到鱼数是多少条? (28)约瑟夫环问题:编号为1,2,3,...,nn个人按顺时针方向围坐圈,每人持有个正整数密码。开始任选个正整数m作为报数上限值,从第个人开始按顺时针报数,报到m时停止...
  • 数据四位整数,在传递过程中加密,加密规则如下:每位数字都加上5,然后用和除以10余数代替该数字,再将第一位和第四位交换,第二位和第三位交换、有五个学生,每个学生有3门课成绩,从键盘输入以上数据...

空空如也

空空如也

1 2 3
收藏数 51
精华内容 20
关键字:

一位最大的偶数是多少