CSP第22次 202104-2 邻域均值 C语言满分答案

CSP第22次 202104-2 邻域均值 C语言满分答案

#include<stdio.h>
int main(){
    int i,j,n,L,r,t,t1,t2,end=0;
    int a,b,c,d;//对于中心元素,邻域左上元素为s[a][b],右下元素为s[c][d]
    int a1,b1,c1,d1;//对于新的中心元素,邻域左上元素为s[a1][b1],右下元素为s[c1][d1]
    float sum,num;//sum为目前元素总值,num为目前元素总个数
    scanf("%d%d%d%d",&n,&L,&r,&t);
    int s[n][n];
    for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%d",&s[i][j]);
    for(i=0;i<n;i++){
        j=0;sum=0;num=0;//每一行对第一个元素计算,重新赋初值
        //确定邻域范围a,b,c,d
        a=i-r;if(a<0) a=0;
        b=j-r;if(b<0) b=0;
        c=i+r;if(c>=n) c=n-1;
        d=j+r;if(d>=n) d=n-1;
        //计算第一个元素的邻域
        for(t1=a;t1<c+1;t1++){
            for(t2=b;t2<d+1;t2++){
                sum+=s[t1][t2];
                num++;
            }
        }
        if(sum/num<=t) end++;
        //计算本行之后元素的邻域
        for(j=1;j<n;j++){
            //确定新的邻域范围a1,b1,c1,d1
            a1=i-r;if(a1<0) a1=0;
            b1=j-r;if(b1<0) b1=0;
            c1=i+r;if(c1>=n) c1=n-1;
            d1=j+r;if(d1>=n) d1=n-1;
            //判断左边界是否变化,若变化则减去
            if(b1!=b){
                for(t1=a;t1<c+1;t1++){
                    sum-=s[t1][b];
                    num--;
                }
            }
            //判断右边界是否变化,若变化则加上
            if(d1!=d){
                for(t1=c;t1>=a;t1--){
                    sum+=s[t1][d1];
                    num++;
                }
            }
            if(sum/num<=t) end++;
            a=a1;b=b1;c=c1;d=d1;//重新定义目前邻域范围
        }
    }
    printf("%d",end);
    return 0;
}

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

琴kk

给我一点点鼓励吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值