week8 一些训练

1. 大整数的计算

void implement(int k, int n)
{
    num[1][0] = 1;
    if(n == 1 && n == 2) return;
    for(int i = 2; i < n; i++)
    {
        int flag = i, mark = 0;
        for(int l = 0; l < 50; l++)
        {
            num[i][l] = mark;
            for(int j = 0; j < k; j++)
                if(flag - j > 0) num[i][l] +=  num[flag - j - 1][l];
            mark = num[i][l] / 10;
            num[i][l] %= 10;
        }
    }
}

2 最大等差数列(费脑子)

复习了一下数列去重的算法:(虽无用)

 for(int j = 1; j < a; j++)
        {
            if(num[j] == num[j - 1])
            {
                for(int k = j + 1; k < a; k++) num[k - 1] = num[k];
                a--; j--;
            }
        }

这道题有点暴力?
总体思路就是三重循环,记录下公差和第二项,因为第二项和第三项在计算过程中一直在移动。
然后 a = 1和 a = 2的情况要单独考虑,因为它们不会进入循环(或者ijk三次循环都到a截止,这时候令max=1就完事了)

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int T;
    cin >> T;
    for(int i = 0; i < T; i++)
    {
        int a, num[100], max = 1;
        cin >> a;
        for(int j = 0; j < a; j++) cin >> num[j];
        sort(num, num + a);
        for(int i = 0; i < a - 2; i++)
        {
            for(int j = i + 1; j < a - 1; j++)
            {
                int m = num[j] - num[i], n = num[j], temp = 2;
                for(int k = j + 1; k < a; k++)
                {
                    if(num[k] - n == m)
                    {
                        n = num[k];
                        temp++;
                    }
                }
                max = max > temp ? max : temp;
            }
        }
        if(a == 2) max = 2;
        cout << "case #" << i << ":" << endl << max << endl;
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值