c#循环递减小数,生成重复小数和指定数量


例如:1.20最大值 最小值0.23 生成30个小数:
1.20
1.20
1.20
1.20
1.19
1.19
1.19
1.18
1.18
1.18
1.18
..........
0.23
0.23
最后一位0.23,每次循环将一个数 输出,怎样实现呢?

你这问题和我前几天回答的另一个问题有些类似,只不过你的需求是生成小数,而那个问题生成的是整数而已,请参考:

补充示例如下:

// 最小数

var min = 23;
// 最大数
var max = 120;
// 要生成数的个数
var digits = 300;
// 最小出现次数
var minOccurrences = 1;
if (digits < max - min + 1)
{
    digits = max - min + 1;
    Console.WriteLine($"期望数小于实际数,自动补位期望数为{digits}");
}

// 生成的数的集合
var numbers = new List<int>();
// 先确保从最大数到最小数递减至少都有一个数
numbers.AddRange(Enumerable.Range(min, max - min + 1).SelectMany(x => Enumerable.Repeat(x, minOccurrences)));
// 查看结果
Display(numbers);
// 计算需要补位多少个数
var fillGap = digits - (max - min + 1) * minOccurrences;
if (fillGap <= 0)
{
    Console.WriteLine("不需要补位");
    Console.ReadKey();
    return;
}
Console.WriteLine($"需要补位{fillGap}个数");
var random = new Random();
// 生成补位的数
for (var i = 0; i < fillGap; i++)
{
    numbers.Add(random.Next(min, max + 1));
}
Display(numbers);
Console.ReadKey();

static void Display(List<int> numbers)
{
    var result = numbers.Select(x => x / 100.00).OrderByDescending(x=>x).ToList();
    Console.WriteLine(string.Join(",", result.Select(x=>x.ToString("0.00"))));
}
Max= 1.2;
Min = 0.23;
while(Max>min){
  printf(Max);
  Max -= 0.1
}

由于我是用手机📱回答,所以源码就不给你写出来了,授人以渔吧:
你既然说到了循环两个字,那就肯定少不了用循环语句,并且按照输出形式,应该用和for循环,已知最大值和最小值,你想达到的生成重复小数,可以使用标志位和判断语句实现,最好用一个数学组保存这些字值,在输出,效果更好,不懂的可以问我,乐意效劳

1、效果如下

img

2、代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Diminishing
{
    /*
    c#循环递减小数,生成重复小数和指定数量
    例如:1.20最大值 最小值0.23 生成30个小数:
    1.20
    1.20
    1.20
    1.20
    1.19
    1.19
    1.19
    1.18
    1.18
    1.18
    1.18
    ..........
    0.23
    0.23
    最后一位0.23,每次循环将一个数 输出,怎样实现呢?
     */
    class Program
    {
        static void Main(string[] args)
        {
            float maxValue = 1.20f;
            float minValue = 0.23f;
            int maxCount = 30;
            int range = Convert.ToInt32(maxValue * 100) - Convert.ToInt32(minValue * 100); //最大值和最小值的差值,可转为整数相差
            int unit = range / maxCount; //97/30=3,每个小数递减至少要减去0.03,才能循环到最小值

            for (int i = 0; i < maxCount; i++)
            {
                float newValue = (maxValue * 100 - unit * i) / 100;
                if (i == maxCount - 1) //循环到最后一个值就是最小值
                {
                    Console.WriteLine(minValue.ToString("0.00"));
                }
                else
                {
                    Console.WriteLine(newValue.ToString("0.00"));
                }
            }


            Console.ReadKey();
        }
    }
}



int fun(double a, double b, int loop, int n)
{
    double m = (a-b)/(loop/n-1);
    double p;
    
    for(int i = 0; i <loop/n; i++)
    {
        p = a-m*i;
        for(int j = 0;j<n;j++)
        {
            printf("%lf\n", p);    
        }
    }
    
    return 0;
}

int main ()
{

    double max = 1.2, min = 0.23;
    int loop = 30, n=3;
    
    fun(max,min,loop,n);  //输入最大值, 最小值, 指定数量, 循环次数

    return 0;
}

你的问题问得好,你没说清楚重复几次,随机还是基数循环几次,偶数循环几次,还是随机?你把需求写详细一点,上面随便哪一位都会给你答案。