我正在嘗試學習 C#,所以我在open.kattis.com上做作業。我有三個名為 A、B 和 C 的變數,并且必須按給定的順序列印它們。A是最小變數,B是中間變數,C是最大變數。
我給變數 1、2、5 和順序 ABC,所以輸出列印是 1 2 5 我給變數 1、10、22 和順序 CAB,所以輸出是 22 1 10
然而,我的問題是改進我的代碼。現在我正在檢查 switch-case 中的輸入順序,想知道是否有更好的方法。
我的提交可以在這里看到:
using System;
using System.Linq;
class Program
{
public static void Main(string[] args)
{
string[] input = Console.ReadLine().Split(' ');
string order = Console.ReadLine();
int[] inputArray = {0, 0, 0};
int A = 0, B = 0, C = 0;
for (int i = 0; i < input.Length; i )
{
inputArray[i] = Int32.Parse(input[i]);
}
A = inputArray.Min();
C = inputArray.Max();
for (int i = 0; i < inputArray.Length; i )
{
if (inputArray[i] != A && inputArray[i] != C)
{
B = inputArray[i];
}
}
switch (order)
{
case "ABC":
Console.WriteLine($"{A} {B} {C}");
break;
case "ACB":
Console.WriteLine($"{A} {C} {B}");
break;
case "BAC":
Console.WriteLine($"{B} {A} {C}");
break;
case "BCA":
Console.WriteLine($"{B} {C} {A}");
break;
case "CBA":
Console.WriteLine($"{C} {B} {A}");
break;
case "CAB":
Console.WriteLine($"{C} {A} {B}");
break;
}
}
}
uj5u.com熱心網友回復:
您的應用:
class Program
{
public static void Main(string[] args)
{
var input = Console.ReadLine().Split(' ').Select(int.Parse).OrderBy(x=> x).ToArray();
var order = Console.ReadLine().Select(x=> x-'A');
var output = string.Join(" ", order.Select(x => input[x]));
Console.WriteLine(output);
}
}
為自定義數量的輸入作業。
uj5u.com熱心網友回復:
讓我們概括一下解決方案。所以你有資料陣列:
int[] inputArray = new int[] {1, 2, 3}
和order:
string order = "BAC";
現在我們可以回圈并order輸出相應的陣列項:
for (char letter in order)
Console.Write($"{inputArray[letter - 'A']} ");
這里我們將letters 從order( B, A, C) 轉換為索引 ( 1, 0, 2)
請注意,我們可以很好地使用 2 或 4 個專案的陣列,只要我們有相應的order
代碼:
public static void Main(string[] args) {
string[] input = Console
.ReadLine()
.Split(' ', StringSplitOptions.RemoveEmptyEntries);
int[] inputArray = new int[input.Length];
for (int i = 0; i < input.Length; i)
inputArray[i] = int.Parse(input[i]);
Array.Sort(inputArray);
string order = Console.ReadLine();
for (char letter in order)
Console.Write($"{inputArray[letter - 'A']} ");
}
uj5u.com熱心網友回復:
一個答案是超級高級的,而另一個答案對于任何未排序的輸入都失敗了,所以這是我幫助你的機會。
對于任意數量的輸入,您可以概括任務的兩個重要部分:
- 獲取最小值、最大值、中間值(或最小值、...、大于 3 個專案的最大值):這可以通過對集合進行排序來完成。
- 以字母表示的轉換順序到現在排序的陣列中元素的索引。
最小值、中間值、最大值
var a = new[] {22, 10, 1};
Array.Sort(a);
var min = a[0];
var middle = a[1];
var max = a[2];
Console.WriteLine($"{min}, {middle}, {max}");
這列印
1, 10, 21
從 CAB 到 2,0,1(索引)
C# 中的字符(~字母)具有數字值,我們可以利用它。
char c1 = 'A';
char c2 = 'B';
Console.WriteLine((byte)c1);
Console.WriteLine((byte)c2);
Console.WriteLine(c1 - 'A');
Console.WriteLine(c2 - 'A');
這列印
65
66
0
1
知道了這一點,讓我們試著翻譯“CAB”:
string order = "CAB";
foreach(char c in order)
{
int index = c - 'A';
Console.WriteLine($"Character '{c}' is index: {index}");
}
這列印:
Character 'C' is index: 2
Character 'A' is index: 0
Character 'B' is index: 1
解決方案
配備這兩個轉換,您應該能夠概括您的解決方案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/444763.html
上一篇:兩個陣列:在第一個中查找缺少的專案,在第二個中查找缺少的專案
下一篇:將字串排序為雙精度
