solution.md 2.1 KB
Newer Older
每日一练社区's avatar
每日一练社区 已提交
1
# 等差数列
F
fix bug  
feilong 已提交
2

每日一练社区's avatar
每日一练社区 已提交
3
#### 题目描述
F
fix bug  
feilong 已提交
4

每日一练社区's avatar
每日一练社区 已提交
5 6 7 8 9 10
数学老师给小明出了一道等差数列求和的题目。

但是粗心的小明忘记了一部分的数列,只记得其中 N 个整数。

现在给出这 N 个整数,小明想知道包含这 N 个整数的最短的等差数列有几项?

11
**输入格式**
F
fix bug  
feilong 已提交
12

每日一练社区's avatar
每日一练社区 已提交
13 14 15 16 17
输入的第一行包含一个整数 N。

第二行包含 N 个整数 A1,A2,⋅⋅⋅,AN。(注意 A1∼AN 并不一定是按等差数
列中的顺序给出)

18
**输出格式**
F
fix bug  
feilong 已提交
19

每日一练社区's avatar
每日一练社区 已提交
20 21
输出一个整数表示答案。

22
**输入样例:**
F
fix bug  
feilong 已提交
23

每日一练社区's avatar
每日一练社区 已提交
24 25 26 27
```
5
2 6 4 10 20
```
28
**输出样例:**
F
fix bug  
feilong 已提交
29

每日一练社区's avatar
每日一练社区 已提交
30 31 32
```
10
```
33
**样例解释**
F
fix bug  
feilong 已提交
34

每日一练社区's avatar
每日一练社区 已提交
35 36 37 38
包含 2、6、4、10、20 的最短的等差数列是 2、4、6、8、10、12、14、16、18、20。


## aop
F
fix bug  
feilong 已提交
39

每日一练社区's avatar
每日一练社区 已提交
40
### before
F
fix bug  
feilong 已提交
41

每日一练社区's avatar
每日一练社区 已提交
42 43 44 45 46 47 48 49 50 51 52 53 54 55
```cpp
#include <iostream>
#include <algorithm>

using namespace std;
const int N = 1e5 + 10;
int a[N];

int gcd(int a, int b) 
{
    return b ? gcd(b, a % b) : a;
}
```
### after
F
fix bug  
feilong 已提交
56

每日一练社区's avatar
每日一练社区 已提交
57 58 59 60 61
```cpp

```

## 答案
F
fix bug  
feilong 已提交
62

每日一练社区's avatar
每日一练社区 已提交
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
```cpp
int main()
{
    int n;
    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> a[i];

    sort(a, a + n); 

    int d = 0;
    for (int i = 1; i < n; i++)
        d = gcd(d, a[i] - a[0]); 

    if (d)
        cout << (a[n - 1] - a[0]) / d + 1; 
    else
        cout << n;

    return 0;
}

```
## 选项

F
fix bug  
feilong 已提交
88

每日一练社区's avatar
每日一练社区 已提交
89
### A
F
fix bug  
feilong 已提交
90

每日一练社区's avatar
每日一练社区 已提交
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
```cpp
int main()
{
    int n;
    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> a[i];

    sort(a, a + n); 

    int d = 0;
    for (int i = 1; i < n; i++)
        d = gcd(d, a[i] - a[0]); 

    if (d)
        cout << (a[n] - a[0]) / d + 1; 
    else
        cout << n;

    return 0;
}
```

### B
F
fix bug  
feilong 已提交
115

每日一练社区's avatar
每日一练社区 已提交
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
```cpp
int main()
{
    int n;
    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> a[i];

    sort(a, a + n); 

    int d = 0;
    for (int i = 1; i < n; i++)
        d = gcd(d, a[i] - a[0]); 

    if (d)
        cout << (a[n - 1] - a[0]) / d; 
    else
        cout << n;

    return 0;
}
```

### C
F
fix bug  
feilong 已提交
140

每日一练社区's avatar
每日一练社区 已提交
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
```cpp
int main()
{
    int n;
    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> a[i];

    sort(a, a + n); 

    int d = 0;
    for (int i = 1; i < n; i++)
        d = gcd(d, a[i] - a[0]); 

    if (d)
        cout << (a[n + 1] - a[0]) / d + 1; 
    else
        cout << n;

    return 0;
}
```