1012 数字分类 (C++)

这是一个编程问题,要求对一组不超过1000的正整数进行特定分类并计算相关统计量:A1是5的倍数且偶数的和;A2是被5除后余1的数字交错和;A3是余2的数字个数;A4是余3的数字平均数(1位小数);A5是余4的最大数字。程序通过遍历数组计算这些值,如果某类不存在,则输出N。
摘要由CSDN通过智能技术生成

给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字:

  • A1 = 能被 5 整除的数字中所有偶数的和;

  • A2 = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 n1−n2+n3−n4⋯;

  • A3 = 被 5 除后余 2 的数字的个数;

  • A4 = 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位;

  • A5 = 被 5 除后余 4 的数字中最大数字。

输入格式:

每个输入包含 1 个测试用例。每个测试用例先给出一个不超过 1000 的正整数 N,随后给出 N 个不超过 1000 的待分类的正整数。数字间以空格分隔。

输出格式:

对给定的 N 个正整数,按题目要求计算 A1~A5 并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。

若分类之后某一类不存在数字,则在相应位置输出 N

输入样例 1:

13 1 2 3 4 5 6 7 8 9 10 20 16 18

输出样例 1:

30 11 2 9.7 9

输入样例 2:

8 1 2 4 5 6 7 9 16

输出样例 2:

N 11 2 N 9

把输入的数据存入数组,然后遍历数组,每遍历到一个数就判断此数属于哪一类,然后在相应的类下计算结果。

  • (简单)A1,一个简单的与运算就可算出总和。

  • (困难)A2 ,通过一个int型标志w来改变正负号,初始w=2,每操作一次,w++,正负号改变一次,计算总和sum。

  • (简单)A3 , count计数;

  • (简单)A4 , 先算出总和a4,K记录下个数,平均值用a4/K得到;

  • (简单)A5 ,找最大的那个数。

#include <iostream>
#include <iomanip>
using namespace  std;
int main(){
    int n ;
    cin >> n ;
    int a[n] ;
    for(int i =0; i<n ;i++){
    cin >> a[i] ;
    }
    double a1=0 ,a2=0,a3=0,a4=0,a5=0  ,count=0 ,k =0;
    int max =0 ;
    int w =2 ,sum=0;
    for(int i =0; i<n ;i++){   //求A1
        if(a[i]%5 == 0 && a[i]%2 == 0 )
        a1 += a[i] ;
        
        if(a[i]%5 == 1){
            if(w%2 == 0){        // a2 是加号
              sum = sum+a[i] ; 
            }       
           else {
               sum = sum-a[i] ;   // a2是减号
               }
               w++ ;
        }
         if(a[i]%5 ==2)  count ++ ;     //a3
        
         if(a[i]%5 ==3) {
            a4 += a[i] ;
             k++ ; 
         }
        if(a[i]%5 == 4){
            a5 = a[i] ;
            if(a[i] > max  )
                max = a[i] ;
        }
    }
    if(a1 == 0)  cout << "N" << " ";
    else  cout << a1 << " ";
    
     if(w == 2)  cout << "N" << " ";
    else  cout << sum  << " ";
    
     if(count == 0)  cout << "N"<< " " ;
    else  cout << count<< " " ;
    
     if(a4 == 0)  cout << "N"<< " " ;
    else  cout <<fixed <<setprecision(1) << a4/k << " " ;
    
     if(a5 == 0)  cout << "N" ;
    else  cout << max ;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: OpenCV是一个开源计算机视觉库,可以用于图像处理和计算机视觉任务。数字识别是计算机视觉中的一个重要应用领域,通过使用OpenCV的图像处理和模式识别功能,可以实现数字识别功能。 要实现数字识别,首先需要准备一组带有标签的数字样本图像。可以使用OpenCV提供的图像读取功能,将样本图像加载到内存中。 接下来,可以通过OpenCV提供的图像预处理功能,对图像进行预处理,例如去噪、增强对比度等,以提高数字识别的准确性。 然后,可以采用OpenCV的特征提取和模式识别功能,提取样本图像中的数字特征,并训练一个分类器来识别这些数字特征。 训练分类器可以使用OpenCV提供的机器学习库,例如支持向量机(SVM)或多层感知器(MLP)等。通过使用训练样本,可以训练一个分类器来学习如何区分不同的数字。 一旦分类器训练完成,就可以使用它来识别新的数字图像。通过将新的数字图像传入分类器,可以得到识别结果,即图像中的数字。 总结来说,通过利用OpenCV的图像处理和模式识别功能,结合合适的特征提取和分类器训练方法,就可以实现数字识别。这样就能够实现自动识别数字图像中的数字,对于许多应用场景如自动化识别、字符识别等具有重要意义。 ### 回答2: OpenCV是一个开源的计算机视觉库,提供了各种用于图像处理和计算机视觉算法的函数和工具。通过使用OpenCV,我们可以实现数字识别的功能。 在C语言中,我们可以使用OpenCV库的功能来进行数字识别的处理。首先,我们需要将原始图像加载到内存中。可以使用OpenCV的函数来读取和处理图像文件,包括数字图片。 接下来,我们需要对图像进行预处理,以提取图像中的数字信息。这包括将图像转换为灰度图像,使用阈值化将图像二值化,去除噪声等。通过这些预处理步骤,我们可以将图像中的数字与背景分离开来。 然后,我们可以使用OpenCV提供的形态学操作函数来进一步提取图像中的数字。形态学操作包括膨胀、腐蚀、开运算、闭运算等,可以帮助我们更好地提取图像中的数字形状。 最后,我们可以使用机器学习技术,如神经网络、支持向量机等,在提取的数字上训练一个分类器来实现数字识别。通过将数字与其对应的标签进行训练,我们可以将输入的图像与已知数字进行匹配,并识别出图像中的数字。 使用OpenCV进行数字识别的C语言实现需要具备一定的图像处理和编程知识。通过合理的预处理和特征提取,结合合适的机器学习算法,我们可以实现准确的数字识别功能。OpenCV提供了丰富的函数和工具,使得数字识别的实现变得更加简单和高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值