paizaラーニングレベルアップ問題集の配列活用メニューを、LINQ(Language-Integrated Query)を使ってやってみました。
指定の要素のカウント
using System;
using System.Linq;
public class Program
{
public static void Main()
{
int[] NK = Console.ReadLine().Split().Select(int.Parse).ToArray();
var (N, K) = (NK[0], NK[1]);
int[] A = Enumerable.Range(0, N).Select(_ => int.Parse(Console.ReadLine())).ToArray();
System.Console.WriteLine(A.Count(a => a == K));
}
}
全ての要素の和
using System;
using System.Linq;
public class Program
{
public static void Main()
{
int N = int.Parse(Console.ReadLine());
int[] A = Enumerable.Range(0, N).Select(_ => int.Parse(Console.ReadLine())).ToArray();
System.Console.WriteLine(A.Sum());
}
}
配列の最大値
using System;
using System.Linq;
public class Program
{
public static void Main()
{
int N = int.Parse(Console.ReadLine());
int[] A = Enumerable.Range(0, N).Select(_ => int.Parse(Console.ReadLine())).ToArray();
System.Console.WriteLine(A.Max());
}
}
配列の最小値
using System;
using System.Linq;
public class Program
{
public static void Main()
{
int N = int.Parse(Console.ReadLine());
int[] A = Enumerable.Range(0, N).Select(_ => int.Parse(Console.ReadLine())).ToArray();
System.Console.WriteLine(A.Min());
}
}
指定要素があるかの判定
using System;
using System.Linq;
public class Program
{
public static void Main()
{
int[] NK = Console.ReadLine().Split().Select(int.Parse).ToArray();
var (N, K) = (NK[0], NK[1]);
int[] A = Enumerable.Range(0, N).Select(_ => int.Parse(Console.ReadLine())).ToArray();
System.Console.WriteLine(A.Any(a => a == K) ? "Yes" : "No");
}
}
指定要素の先頭位置
using System;
using System.Linq;
public class Program
{
public static void Main()
{
int[] NK = Console.ReadLine().Split().Select(int.Parse).ToArray();
var (N, K) = (NK[0], NK[1]);
int[] A = Enumerable.Range(0, N).Select(_ => int.Parse(Console.ReadLine())).ToArray();
int index = A
.Select((a, i) => new { Id = i + 1, Value = a })
.Where(a => a.Value == K)
.Select(a => a.Id)
.FirstOrDefault();
if (index == 0) Console.WriteLine(-1);
else Console.WriteLine(index);
}
}
要素の種類数
using System;
using System.Linq;
public class Program
{
public static void Main()
{
int N = int.Parse(Console.ReadLine());
int[] A = Enumerable.Range(0, N).Select(_ => int.Parse(Console.ReadLine())).ToArray();
Console.WriteLine(A.Distinct().Count());
}
}
全ての要素に対する操作
using System;
using System.Linq;
public class Program
{
public static void Main()
{
int[] NK = Console.ReadLine().Split().Select(int.Parse).ToArray();
var (N, K) = (NK[0], NK[1]);
int[] A = Enumerable.Range(0, N).Select(_ => int.Parse(Console.ReadLine())).ToArray();
int[] B = A.Select(a => a + K).ToArray();
foreach (int b in B) Console.WriteLine(b);
}
}
配列の順序の反転
using System;
using System.Linq;
public class Program
{
public static void Main()
{
int N = int.Parse(Console.ReadLine());
int[] A = Enumerable.Range(0, N).Select(_ => int.Parse(Console.ReadLine())).ToArray();
int[] B = A.Reverse().ToArray();
foreach (int b in B) Console.WriteLine(b);
}
}
変数の入れ替え
using System;
using System.Linq;
public class Program
{
public static void Main()
{
int[] XY = Console.ReadLine().Split().Select(int.Parse).ToArray();
var (X, Y) = (XY[0], XY[1]);
(X, Y) = (Y, X);
Console.WriteLine($"{X} {Y}");
}
}
指定要素の入れ替え
using System;
using System.Linq;
public class Program
{
static void Swap<T>(ref T a, ref T b)
{
(a, b) = (b, a);
}
public static void Main()
{
int N = int.Parse(Console.ReadLine());
int[] A = Enumerable.Range(0, N).Select(_ => int.Parse(Console.ReadLine())).ToArray();
int[] XY = Console.ReadLine().Split().Select(int.Parse).ToArray();
var (X, Y) = (XY[0] - 1, XY[1] - 1);
Swap(ref A[X], ref A[Y]);
foreach (int a in A) Console.WriteLine(a);
}
}
末尾への要素の追加
using System;
using System.Linq;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
int N = int.Parse(Console.ReadLine());
List<int> A = Enumerable.Range(0, N).Select(_ => int.Parse(Console.ReadLine())).ToList();
int b = int.Parse(Console.ReadLine());
A.Add(b);
foreach (int a in A) Console.WriteLine(a);
}
}
指定位置への要素の追加
using System;
using System.Linq;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
int N = int.Parse(Console.ReadLine());
List<int> A = Enumerable.Range(0, N).Select(_ => int.Parse(Console.ReadLine())).ToList();
int[] nb = Console.ReadLine().Split().Select(int.Parse).ToArray();
var (n, b) = (nb[0], nb[1]);
A.Insert(n, b);
foreach (int a in A) Console.WriteLine(a);
}
}
指定要素の削除
using System;
using System.Linq;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
int N = int.Parse(Console.ReadLine());
List<int> A = Enumerable.Range(0, N).Select(_ => int.Parse(Console.ReadLine())).ToList();
int n = int.Parse(Console.ReadLine()) - 1;
A.RemoveAt(n);
foreach (int a in A) Console.WriteLine(a);
}
}
九九表
using System;
using System.Linq;
public class Program
{
public static void Main()
{
int[][] A = Enumerable.Range(1, 9).Select(i => Enumerable.Range(1, 9).Select(j => i * j).ToArray()).ToArray();
foreach (int[] a in A) Console.WriteLine(String.Join(" ", a));
}
}
全ての要素を用いた処理
using System;
using System.Linq;
public class Program
{
public static void Main()
{
int N = int.Parse(Console.ReadLine());
int[] A = Enumerable.Range(0, N).Select(_ => int.Parse(Console.ReadLine())).ToArray();
for (int i = 0; i < N; i++)
{
for (int j = 0; j < i; j++)
{
Console.WriteLine(A[i] * A[j]);
}
}
}
}
配列のサイズの変更
using System;
using System.Linq;
public class Program
{
public static void Main()
{
int[] Nn = Console.ReadLine().Split().Select(int.Parse).ToArray();
var (N, n) = (Nn[0], Nn[1]);
int[] A = Enumerable.Range(0, N).Select(_ => int.Parse(Console.ReadLine())).ToArray();
Array.Resize(ref A, n);
foreach (int a in A) Console.WriteLine(a);
}
}
重複要素の削除
using System;
using System.Linq;
public class Program
{
public static void Main()
{
int N = int.Parse(Console.ReadLine());
int[] A = Enumerable.Range(0, N).Select(_ => int.Parse(Console.ReadLine())).ToArray();
int[] B = A.Distinct().ToArray();
foreach (int b in B) Console.WriteLine(b);
}
}
条件を満たす要素のみの配列作成
using System;
using System.Linq;
public class Program
{
public static void Main()
{
int[] NK = Console.ReadLine().Split().Select(int.Parse).ToArray();
var (N, K) = (NK[0], NK[1]);
int[] A = Enumerable.Range(0, N).Select(_ => int.Parse(Console.ReadLine())).ToArray();
int[] B = A.Where(a => a >= K).ToArray();
foreach (int b in B) Console.WriteLine(b);
}
}
傾斜配点
using System;
using System.Linq;
public class Program
{
public static void Main()
{
int N = int.Parse(Console.ReadLine());
int[] M = Console.ReadLine().Split().Select(int.Parse).ToArray();
int[][] A = Enumerable.Range(0, N).Select(_ => Console.ReadLine().Split().Select(int.Parse).ToArray()).ToArray();
Console.WriteLine(A.Select(a => a.Select((_, i) => M[i] * a[i]).Sum()).Max());
}
}
内定
using System;
using System.Linq;
public class Program
{
public static void Main()
{
int[] NKM = Console.ReadLine().Split().Select(int.Parse).ToArray();
var (N, K, M) = (NKM[0], NKM[1], NKM[2]);
int[] A = Enumerable.Range(0, N).Select(_ => int.Parse(Console.ReadLine())).ToArray();
Console.WriteLine(A.OrderByDescending(a => a).Where((a, i) => i >= M && a >= K).Count());
}
}
queue(9)係
using System;
using System.Linq;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
int N = int.Parse(Console.ReadLine());
Queue<int> A = new Queue<int>();
for (int i = 0; i < N; i++)
{
string[] s = Console.ReadLine().Split();
if ("in".Equals(s[0]))
{
int n = int.Parse(s[1]);
A.Enqueue(n);
}
else if ("out".Equals(s[0]))
{
if (A.Count > 0)
{
A.Dequeue();
}
}
}
while (A.Count > 0)
{
Console.WriteLine(A.Dequeue());
}
}
}
二人三脚
using System;
using System.Linq;
public class Program
{
public static void Main()
{
int N = int.Parse(Console.ReadLine());
int[] A = Enumerable.Range(0, N).Select(_ => int.Parse(Console.ReadLine())).ToArray();
int[] B = A.OrderBy(a => a).ToArray();
int[] D = Enumerable.Range(1, N - 1).Select(i => B[i] - B[i - 1]).ToArray();
int k = Array.IndexOf(D, D.Min());
Console.WriteLine(B[k]);
Console.WriteLine(B[k + 1]);
}
}
場所取り
using System;
using System.Linq;
public class Program
{
public static void Main()
{
int[] NKF = Console.ReadLine().Split().Select(int.Parse).ToArray();
var (K, F) = (NKF[1], NKF[2]);
int[] A = Enumerable.Range(0, K).Select(_ => int.Parse(Console.ReadLine())).ToArray();
int[] B = A.Where((_, i) => i >= F).Distinct().ToArray();
foreach (int b in B) Console.WriteLine(b);
}
}
ボウリング
using System;
using System.Linq;
public class Program
{
public static void Main()
{
int[] P = Console.ReadLine().Split().Select(int.Parse)
.Concat(Console.ReadLine().Split().Select(int.Parse))
.Concat(Console.ReadLine().Split().Select(int.Parse))
.Concat(Console.ReadLine().Split().Select(int.Parse))
.Reverse().ToArray();
Console.WriteLine(Array.IndexOf(P, 1) + 1);
Console.WriteLine(P.Count(p => p == 1));
}
}
集団行動
using System;
using System.Linq;
public class Program
{
static void Swap<T>(ref T a, ref T b)
{
(a, b) = (b, a);
}
public static void Main()
{
int[] NQ = Console.ReadLine().Split().Select(int.Parse).ToArray();
var (N, Q) = (NQ[0], NQ[1]);
int[] A = Enumerable.Range(1, N).ToArray();
for (int q = 0; q < Q; q++)
{
string[] s = Console.ReadLine().Split();
if ("swap".Equals(s[0]))
{
var (a, b) = (int.Parse(s[1]) - 1, int.Parse(s[2]) - 1);
Swap(ref A[a], ref A[b]);
}
else if ("reverse".Equals(s[0]))
{
A = A.Reverse().ToArray();
}
else if ("resize".Equals(s[0]))
{
int c = int.Parse(s[1]);
if (c < A.Length)
{
Array.Resize(ref A, c);
}
}
}
foreach (int a in A)
{
Console.WriteLine(a);
}
}
}