https://www.runoob.com/cplusplus/cpp-arrays.html
•【1】数组定义,数组与数组下标的含义
•【1】数组的读入与输出
•【2】纯一维数组的综合运用
•【3】纯二维数组与多维数组的综合应用
C++ 支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。
数组的声明并不是声明一个个单独的变量,比如 number0
、number1
、...
、number99
,而是声明一个数组变量,比如 numbers
,然后使用 numbers[0]
、numbers[1]
、...
、numbers[99]
来代表一个个单独的变量。数组中的特定元素可以通过索引访问。
所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。
在 C++ 中要声明一个数组,需要指定元素的类型和元素的数量,如下所示:
type arrayName [ arraySize ];
这叫做一维数组。arraySize
必须是一个大于零的整数常量,type
可以是任意有效的 C++ 数据类型。例如,要声明一个类型为 double
的包含 10
个元素的数组 balance
,声明语句如下:
double balance[10];
现在 balance 是一个可用的数组,可以容纳 10 个类型为 double
的数字。
如果输入既有可能是 2*500000
的数组,也有可能是 500000*2
的数组怎么办?
i*m+j
https://atcoder.jp/contests/abc161/tasks/abc161_b
n个商品被投票,第i个的票数是Ai
问能不能选出m个商品,使得选出的商品的票数都大于等于 总票数/(4m)
#include <bits/stdc++.h> using namespace std; int n, m, s, c; int a[100]; int main() { cin >> n >> m; for (int i = 0; i < n; i++) { cin >> a[i]; s += a[i]; } for (int i = 0; i < n; i++) { if (4 * m * a[i] >= s) { c++; } } cout << (c < m ? "No" : "Yes") << endl; return 0; }
https://atcoder.jp/contests/abc151/tasks/abc151_b
一共N门课,每门课的分数是0到K的一个数字
已知前N-1门课的分数,问最后一门课至少多少分,才能使得所有课平均分>=M
如果做不到输出-1
#include <bits/stdc++.h> using namespace std; int n, k, m, x; int main() { cin >> n >> k >> m; m *= n; for (int i = 1; i < n; i++) { cin >> x; m -= x; } if (m > k) { cout << -1 << endl; } else { cout << max(m, 0) << endl; } return 0; }
https://atcoder.jp/contests/abc143/tasks/abc143_b
输入n个数字,我们都知道从n个数字中选两个有n*(n+1)/2
个方案
对于这n*(n+1)/2
个方案,选出的2个数字计算乘积
问这n*(n+1)/2
个乘积的和是多少?
#include <bits/stdc++.h> using namespace std; int n, x, s, t; int main() { cin >> n; for (int i = 0; i < n; i++) { cin >> x; s += x; t += x * x; } cout << (s * s - t) / 2 << endl; return 0; }
https://atcoder.jp/contests/abc142/tasks/abc142_b
输入N个数字,问其中有多少个>=K
#include <bits/stdc++.h> using namespace std; int n, k, h, z; int main() { cin >> n >> k; for (int i = 0; i < n; i++) { cin >> h; if (h >= k) { z++; } } cout << z << endl; }
https://atcoder.jp/contests/abc135/tasks/abc135_b
输入一个1到n的排列,问能不能通过交换至多一次让排列变成升序?
#include <bits/stdc++.h> using namespace std; int n, x, c; int main() { cin >> n; for (int i = 1; i <= n; i++) { cin >> x; if (x != i) { c++; } } cout << (c > 2 ? "NO" : "YES") << endl; return 0; }
https://atcoder.jp/contests/abc130/tasks/abc130_b
输入X和n个长度Li,初始在0,第i次向前走Li的长度,问有几次所在的位置<=X
在0不走也算一次
#include <bits/stdc++.h> using namespace std; int n, x, l, s, z = 1; int main() { cin >> n >> x; for (int i = 0; i < n; i++) { cin >> l; s += l; if (s <= x) { z++; } } cout << z << endl; return 0; }
https://atcoder.jp/contests/abc127/tasks/abc127_b
输入r
和D
和X[2000]
X[i+1]=r*X[i]-D
输出X[2001], ..., X[2010]
#include <bits/stdc++.h> using namespace std; int r, d, x; int main() { cin >> r >> d >> x; for (int i = 0; i < 10; i++) { x = r * x - d; cout << x << endl; } return 0; }
https://atcoder.jp/contests/abc124/tasks/abc124_b
输入一个数组,问有多少个数组大于等于自己左边的所有数字
#include <bits/stdc++.h> using namespace std; int n, f, h, z; int main() { cin >> n; for (int i = 0; i < n; i++) { cin >> h; if (f <= h) { f = h; z++; } } cout << z << endl; return 0; }
https://atcoder.jp/contests/abc120/tasks/abc120_b
输入A, B, K
输出A
和B
第K
大的公约数,保证存在
#include <bits/stdc++.h> using namespace std; int a, b, k; int main() { cin >> a >> b >> k; for (int i = 100; i > 0; i--) { if (a % i == 0 && b % i == 0) { if (--k == 0) { cout << i << endl; break; } } } return 0; }
https://atcoder.jp/contests/abc070/tasks/abc070_b
甲在时刻A秒按下按钮,时刻B秒松开按钮
乙在时刻C秒按下按钮,时刻D秒松开按钮
问甲乙同时按下按钮多少秒?
#include <bits/stdc++.h> using namespace std; int a, b, c, d; int main() { cin >> a >> b >> c >> d; cout << max(min(b, d) - max(a, c), 0) << endl; return 0; }
https://atcoder.jp/contests/abc134/tasks/abc134_b
一个人如果站在i,可以监视i-d到i+d的所有人,现在1到n共n个人排成一行
问需要几个人才能监视所有人?
#include <bits/stdc++.h> using namespace std; int n, d; int main() { cin >> n >> d; cout << (n + 2 * d) / (2 * d + 1) << endl; return 0; }
https://atcoder.jp/contests/abc126/tasks/abc126_b
输入4位数字,问是否可能 YYMM, MMYY, AMBIGUOUS or NA
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; int a = n / 100; int b = n % 100; if (0 < a && a < 13 && 0 < b && b < 13) { cout << "AMBIGUOUS" << endl; } else if (0 < b && b < 13) { cout << "YYMM" << endl; } else if (0 < a && a < 13) { cout << "MMYY" << endl; } else { cout << "NA" << endl; } return 0; }
https://atcoder.jp/contests/abc154/tasks/abc154_a
输入A个S色的球,B个T色的球
拿走一个U色的球
问S色的球和T色的球还剩下几个(其中有且只有一种颜色会减少一个)
https://atcoder.jp/contests/abc153/tasks/abc153_a
一个怪物初始生命值H,被攻击一次生命值减少A,如果怪物生命值小于等于零玩家胜利
问需要攻击几次
https://atcoder.jp/contests/abc148/tasks/abc148_a
三个选项1, 2, 3
输入两个错误选项,问正确的是哪个?
https://atcoder.jp/contests/abc144/tasks/abc144_a
输入两个正整数,如果都小于等于9,输出他们的乘积,否则输出-1
https://atcoder.jp/contests/abc122/tasks/abc122_a
A和T配对,C和G配对
输入一个字母,输出和他配对的字母
https://atcoder.jp/contests/abc121/tasks/abc121_a
H行W列的一个网格,其中h行w列被染色,问多少个格子没有被染色
注意没有被染色的格子数目,和选哪些行,哪些列染色无关