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;
}