0 效果
只开3个数组
开1010个数组:
难点:认真读题,特殊情况处理
1 题目
2 思路
- 当n = 2时,为特殊情况,第一个和第二个输出数的值都两个数的平均值;
- 当n > 2时,对第一个数和最后两个个数特殊处理
- 第一个数的输出等于,当输入玩第二个数后,第一个和第二个数区平均为输出值
- 最后一个数输入时,倒数第二个数为最后输入的三个数的平均值,最后一个数为最后输入的两个数的平均值
- 其余情况,输出到目前为止最后三个输入数的平均值作为上一个数的输出。
- 注意:为了节省空间,因为计算只需用到3个数组,因此就只开三个数组大小,不满三个输入时,依次存入A[0],A[1],A[2],满三个数后,A的数组依次前移一个,最后一个存储最新输入的值。
3 代码
#include<cstdio>
int main(){
int n, num;
int A[3];
scanf("%d", &n);
for(int i = 0; i< n; i++){
scanf("%d", &num);
if(i < 3){
A[i] = num;
}else{
A[0] = A[1];
A[1] = A[2];
A[2] = num;
}
if(n == 2 && i == 1){
int res = (A[0] + A[1])/2;
printf("%d %d", res, res);
}else if(i == 1){
printf("%d", (A[0] + A[1])/2);
}else if(i == n - 1){
printf(" %d %d", (A[0] + A[1] + A[2])/3, (A[1] + A[2])/2);
}else if(i > 1){
printf(" %d", (A[0] + A[1] + A[2])/3);
}
}
return 0;
}