NOIP(全国青少年信息学奥林匹克竞赛)是中国计算机学会主办的一项传统竞赛活动,旨在发现和培养青少年计算机编程人才。以下是一些C++编程实战案例,这些案例不仅展示了C++编程的实际应用,也反映了NOIP竞赛中可能遇到的题型和难度:
#include<iostream>
using namespace std;
int main(){
int m, n;
cin >> m >> n;
if(n > m) n = m;
int arr[10000];
int flag = 0;
for(int i = 1; i <= m; i++){
cin >> arr[i];
flag += arr[i];
}
int index = n + 1;
int count = 0;
while(flag != 0){
for(int i = 1; i <= n; i++){
if(arr[i] > 0){
arr[i]--;
flag--;
}
if(arr[i] == 0){
arr[i] = arr[index];
arr[index] = 0;
if(index != m) index++;
}
}
count++;
}
cout << count;
return 0;
}
#include<iostream>
#include<cstring>
using namespace std;
long long pave(int n){
long long c[3] = {0};
c[0] = 1;
c[1] = 3;
c[2] = 5;
if(n == 1) return 1;
else if(n == 2) return 3;
else if(n == 3) return 5;
else return pave(n - 1) + 2 * pave(n - 2);
}
int main(){
int n;
cout << "请输入走道的列数N" << endl;
while(cin >> n){
if(n == 0){
cout << "输入有误,请重新输入!" << endl;
continue;
}
cout << "对应的铺法有:" << endl;
cout << pave(n) << endl;
cout << "铺砖已完成" << endl;
cout << "请输入下一走道的列数:(无其他输入请按EOF结束)" << endl;
}
return 0;
}
#include<iostream>
using namespace std;
long long n, c[1000010], m, p1, s1, s2;
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> c[i];
}
cin >> m >> p1 >> s1 >> s2;
//p1军营加上s1个工兵c[p1] += s1;//原始气势
long long sum1 = 0, sum2 = 0;
for (int i = 1; i <= n; i++) {
if (i < m) {
//龙的气势
sum1 += (m - i) * c[i];
} else if (i > m) {
//虎的气势
sum2 += (i - m) * c[i];
}
}
//判断s2加给谁比较好
long long mmin = 1e19, index;
for (int i = 1; i <= n; i++) {
long long total1 = sum1, total2 = sum2;
//加给龙虎其中一方
if (i < m) {
total1 += (m - i) * s2;
} else if (m < i) {
total2 += (i - m) * s2;
}
//计算气势差
long long res = total1 > total2 ? total1 - total2 : total2 - total1;
//记录最小的气势差 和 被加工兵的兵营号
if (mmin > res) {
mmin = res;
index = i;
}
}
cout << index;
return 0;
}
这些案例展示了C++编程在实际应用中的多样性和复杂性,同时也反映了NOIP竞赛对选手编程能力和算法设计能力的考察。通过解决这些问题,参赛者可以提高自己的编程技巧和算法设计能力。