Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Массивы, и вывод.

PhoenixC Профи (619), закрыт 3 года назад
Не могу никак вывести три самых маленьких числа из массива, хелп кто шарит, и как правильно прописать заголовки столбиков "Месяц" "Доход" "Расходы" и "Прибыль", я думаю не правильно у меня))
int[] income = new int[13];
int[] Expenses = new int[13];
int[] Profit = new int[13];
Random rand = new Random();
string Month = "Месяц", Income = "Доход", expenses = "Расходы", profit = "Прибыль";
Console.WriteLine($"{Month} {Income} {expenses} {profit}");
for (int b = 1; b < 13; b++)
{
for (int j = 1; j < Expenses.Length; j++)
{
Expenses[j] = rand.Next(10000, 80000);
for (int i = 1; i < income.Length; i++)
{
income[i] = rand.Next(20000, 100000);
}
}
Profit[b] = income[b] - Expenses[b];
foreach (var item in income)
{
Console.WriteLine($" {b} {income[b]} {Expenses[b]} {Profit[b]}");
break;
}
}
int min = Profit.Min();
int max = Profit.Max();
Console.WriteLine(min);
for (int i = 0; i < 2; i++)
{
if (Profit[i] < min )
min = Profit[i];
Console.WriteLine(min);
}
Лучший ответ
Николай Веселуха Высший разум (360666) 3 года назад
using System;
using System.Collections.Generic;
using System.Linq;
namespace Answer {
class Program {
static void Main() {
var reports = new Reports(12);
reports.RandomFill();
reports.Show();
Console.WriteLine("\n\tМаксимальная прибыль\n");
Console.WriteLine(reports.Max());
Console.WriteLine("\n Минимальная прибыль (максимальный убыток) \n");
Console.WriteLine(reports.Min());
var triple = reports.Min(3);
Console.WriteLine("\n Худшие результаты за отчётный год\n");
foreach (var item in triple) Console.WriteLine(item);
Console.ReadKey();
}
struct Report : IComparable {
public string month;
public int expenses;
public int income;
public int profit;
public override string ToString() {
return $"{month,-10}{income,10}{expenses,10}{profit,10}";
}
public int CompareTo(Report report) {
return profit.CompareTo(report.profit);
}
}
struct Reports {
private List reports;
private readonly int limit;
public Reports(int limit) {
this.limit = limit;
reports = new List();
}
public void RandomFill() {
var months = new string[] {
"Январь",
"Февраль",
"Март",
"Апрель",
"Май",
"Июнь",
"Июль",
"Август",
"Сентябрь",
"Октябрь",
"Ноябрь",
"Декабрь"
};
var rand = new Random();
var report = new Report();
for (var i = 0; i < limit; ++i) {
report.expenses = rand.Next(10000, 80000);
report.income = rand.Next(20000, 100000);
report.profit = report.income - report.expenses;
report.month = months[i];
reports.Add(report);
}
}
public Report Max() {
var box = reports.ToArray();
return box.Max();
}
public Report Min() {
var box = reports.ToArray();
return box.Min();
}
public Report[] Min(int n) {
if (n <= 0) n = 1;
if (n > 12) n = 12;
var src = reports.ToArray();
Array.Sort(src);
var box = new Report[n];
Array.Copy(src, box, n);
return box;
}
public void Show() {
var a = "Период";
var b = "Доходы";
var c = "Расходы";
var d = "Прибыль";
var format = string.Format($"{a,7}{b,13}{c,11}{d,10}\n");
Console.WriteLine(format);
foreach (var report in reports) Console.WriteLine(report);
}
}
}
}
Остальные ответы
вайцы фафцуа Гуру (3636) 3 года назад
можно отсортировать массив, а потом просто использовать slice метод, который есть в c#, чтобы взять 3 элемента последних или первых.
как вариант
PhoenixCПрофи (619) 3 года назад
сортировать нельзя, это же отчет за 12 месяцев)
PhoenixC Профи (619) Если только потом откатить, я вот и не знаю как это всё сделать
вайцы фафцуаГуру (3636) 3 года назад
например:
threeMinArray = Profit.OrderBy(x => x).Take(3)

код не проверял, в переменной threeMinArray массив из трёх минимальных значений массива Profit.

Почитай про LINQ, может это самое удачное решение.
вайцы фафцуаГуру (3636) 3 года назад
при этом сам массив Profit остаётся прежним, там ничего не сортируется.
Похожие вопросы