首页 > 解决方案 > 如何解决数组数的计数和除法问题?

问题描述

我一直在尝试使用 C# 以及 C# 的新手来做一些解决问题的练习。所以这就是问题所在,给定数组 arr= [1,1,0,-1,-1] 有 5 个元素,两个正数,两个负数和一个零数字。两个正数的比率为 2/5=0.400000,两个负数的比率为 2/5 = 0.400000,1 个零的比率为 1/5 = 0.200000。它应该打印为

0.400000
0.400000
0.200000

我实际上要做的是,计算数组中的所有负数并将其除以该数组中的元素总数。该数组中正数和零的情况相同。最后,它会打印出 3 个结果。这是我尝试过的。我没有得到想要的输出。

using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Collections;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.Serialization;
using System.Text.RegularExpressions;
using System.Text;
using System;

class Solution {

    // Complete the plusMinus function below.
    static void plusMinus(int[] arr) {
        int[] positiveArray = new int[arr.Length];
        int[] negativeArray = new int[arr.Length];
        int[] zeroArray = new int[arr.Length];

        for(int i=0; i <arr.Length; i++){
            if(arr[i]>0){

                arr[i]=positiveArray[i];

            }else if(arr[i]<0){
                arr[i] = negativeArray[i];
            }else if(arr[i] == 0){
                arr[i] = zeroArray[i];
            }
        }
        float postive = (float)positiveArray.Length/arr.Length;
        float negative = (float)negativeArray.Length/arr.Length;
        float zero = (float)zeroArray.Length/arr.Length;

        Console.WriteLine(postive);
        Console.WriteLine(negative);
        Console.WriteLine(zero);

    }

    static void Main(string[] args) {
        int n = Convert.ToInt32(Console.ReadLine());

        int[] arr = Array.ConvertAll(Console.ReadLine().Split(' '), arrTemp => Convert.ToInt32(arrTemp))
        ;
        plusMinus(arr);
    }
}

输出示例:

在此处输入图像描述

标签: c#arrays.net

解决方案


因为这是 c#,所以你可以使用一些花哨的 LINQ

Console.WriteLine((float)arr.Count(n => n  > 0)/(float)arr.Length);
Console.WriteLine((float)arr.Count(n => n  < 0)/(float)arr.Length);
Console.WriteLine((float)arr.Count(n => n == 0)/(float)arr.Length);

推荐阅读