例如: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、效果如下
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;
}
你的问题问得好,你没说清楚重复几次,随机还是基数循环几次,偶数循环几次,还是随机?你把需求写详细一点,上面随便哪一位都会给你答案。