paizaのCランク獲得問題の解答がなかったので、備忘録として残します。
明らかに簡単な問題の場合は省略しますが、個人的に少しでも考えたコードを残していきたいと思います。
初心者ですので醜いコードを書きますが、温かい目で見守っていただけると嬉しいです。
また、より良い記述方法などありましたら、コメント等で教えていただけると嬉しいです。
後半はランクC相当の内容になっていま。
目次
- 指定要素の削除
- 九九表
- 全ての要素を用いた処理
- 配列のサイズの変更
- 【配列への副作用を伴う操作】条件を満たす要素のみの配列作成
- 傾斜配点
- 内定
- queue (9) 係
- 二人三脚
- ボウリング
- 【配列に対しての複雑な処理】集団行動
指定要素の削除
using System;
using System.Collections.Generic;
class Program
{
public static void Main()
{
int N =int.Parse(Console.ReadLine());
int [] A= new int [N];
for(int i=0;i<N;i++){
A[i]=int.Parse(Console.ReadLine());
}
List<int> listA=new List<int>(A);
int n=int.Parse(Console.ReadLine());
listA.RemoveAt(n-1);
foreach(var list in listA){
Console.WriteLine(list);
}
}
}
九九表
using System;
class Program
{
public static void Main()
{
for(int i=1;i<=9;i++){
for(int j=1;j<=9;j++){
if(j<9){
Console.Write(i*j+" ");
}else{
Console.WriteLine(i*j);
}
}
}
}
}
全ての要素を用いた処理
using System;
class Program
{
public static void Main()
{
int N=int .Parse(Console.ReadLine());
int []A=new int[N];
for(int i=0;i<N;i++){
A[i]=int.Parse(Console.ReadLine());
}
for(int i=0;i<N;i++){
for(int j=0;j<i;j++){
Console.WriteLine(A[i]*A[j]);
}
}
}
}
配列のサイズの変更
using System;
using System.Collections.Generic;
class Program
{
public static void Main()
{
string [] Nn=Console.ReadLine().Split();
int N=int.Parse(Nn[0]);
int n=int.Parse(Nn[1]);
int []A=new int[N];
for(int i=0;i<N;i++){
A[i]=int.Parse(Console.ReadLine());
}
List <int> result=new List<int>();
for (int i = 0; i < Math.Min(n, N); i++){
result.Add(A[i]);
}
for (int i = N; i < n; i++){
result.Add(0);
}
foreach (var num in result){
Console.WriteLine(num);
}
}
}
リストで実装しました。
重複要素の削除
using System;
class Program
{
public static void Main()
{
int N=int .Parse(Console.ReadLine());
int []A=new int[N];
for(int i=0;i<N;i++){
A[i]=int.Parse(Console.ReadLine());
}
int [] data =A.Distinct().ToArray();
foreach(var result in data){
Console.WriteLine(result);
}
}
}
【配列への副作用を伴う操作】条件を満たす要素のみの配列作成
using System;
using System.Collections.Generic;
class Program
{
public static void Main()
{
string [] NK=Console.ReadLine().Split();
int N=int.Parse(NK[0]);
int K=int.Parse(NK[1]);
int [] A= new int [N];
for(int i=0;i<N;i++){
A[i]=int.Parse(Console.ReadLine());
}
List <int> data =new List<int>();
for(int i=0;i<N;i++){
if(A[i]>=K){
data.Add(A[i]);
}
}
foreach(var result in data){
Console.WriteLine(result);
}
}
}
傾斜配点
using System;
using System.Linq;
class Program
{
public static void Main()
{
int N=int.Parse(Console.ReadLine());
int []M=Console.ReadLine().Split().Select(int.Parse).ToArray();
int [] result =new int[N];
for(int i=0;i<N;i++){
int []A=Console.ReadLine().Split().Select(int.Parse).ToArray();
result[i]=M[0]*A[0]+M[1]*A[1]+M[2]*A[2]+M[3]*A[3]+M[4]*A[4];
}
Console.WriteLine(result.Max());
}
}
内定
using System;
using System.Collections.Generic;
class Program
{
public static void Main()
{
string []NKM=Console.ReadLine().Split();
int N=int.Parse(NKM[0]);
int K=int.Parse(NKM[1]);
int M=int.Parse(NKM[2]);
int []A=new int [N];
for(int i=0;i<N;i++){
A[i]=int.Parse(Console.ReadLine());
}
Array.Sort(A);
Array.Reverse(A);
List<int> result=new List<int>();
for(int i=0;i<N;i++){
if(A[i]>=K){
result.Add(A[i]);
}
}
if (result.Count <= M){
result.Clear();
}else{
result.RemoveRange(0, M);
}
Console.WriteLine(result.Count);
}
}
queue (9) 係
using System;
using System.Collections.Generic;
class Program
{
public static void Main()
{
int N=int.Parse(Console.ReadLine());
List<int> queue=new List<int>();
for(int i=0;i<N;i++){
string [] S=Console.ReadLine().Split();
switch(S[0]){
case "in":
queue.Add(int.Parse(S[1]));
break;
case "out":
if(queue.Count>0){
queue.RemoveAt(0);
}
break;
}
}
foreach(var result in queue){
Console.WriteLine(result);
}
}
}
二人三脚
using System;
class Program
{
public static void Main()
{
int N=int.Parse(Console.ReadLine());
int []A=new int [N];
for(int i=0;i<N;i++){
A[i]=int.Parse(Console.ReadLine());
}
Array.Sort(A);
int result=A[1]-A[0];
int one=0;
int two=1;
for(int i=0;i<N;i++){
for(int j=i+1;j<N;j++){
if(A[j]-A[i]<result){
result=A[j]-A[i];
one=i;
two=j;
}
}
}
Console.WriteLine(A[one]);
Console.WriteLine(A[two]);
}
}
場所取り
using System;
using System.Collections.Generic;
class Program
{
public static void Main()
{
string []NKF=Console.ReadLine().Split();
int N=int.Parse(NKF[0]);
int K=int.Parse(NKF[1]);
int F=int.Parse(NKF[2]);
List <int>A=new List<int>();
for(int i=0;i<K;i++){
A.Add(int.Parse(Console.ReadLine()));
}
A.RemoveRange(0,F);
HashSet<int> result=new HashSet<int>(A);
foreach(var data in result){
Console.WriteLine(data);
}
}
}
ボウリング
using System;
using System.Collections.Generic;
class Program
{
public static void Main()
{
int[][] P = new int[4][];
for (int i = 0; i < 4; i++)
{
P[i] = Array.ConvertAll(Console.ReadLine().Split(' '), int.Parse);
Array.Reverse(P[i]);
}
List<int> pin =new List<int>();
for (int i = 3; i >= 0; i--)
{
for (int j = 0; j < P[i].Length; j++)
{
pin.Add(P[i][j]);
}
}
int p=pin.IndexOf(1)+1;
int count=0;
foreach(var result in pin){
if(result==1){
count++;
}
}
Console.WriteLine(p);
Console.WriteLine(count);
}
}
一番苦労しました。
二次元配列のまま行う方法が分からなかったので、一次元に変換して行いました。
【配列に対しての複雑な処理】集団行動
using System;
using System.Collections.Generic;
class Program
{
public static void Main()
{
string []NQ=Console.ReadLine().Split();
int N=int.Parse(NQ[0]);
int Q=int.Parse(NQ[1]);
List<int> list=new List<int>();
for(int i=0;i<N;i++){
list.Add(i+1);
}
for(int i=0;i<Q;i++){
string [] S=Console.ReadLine().Split();
switch(S[0]){
case "swap":
int A=int.Parse(S[1]);
int B=int.Parse(S[2]);
int tmp;
tmp=list[A-1];
list[A-1]=list[B-1];
list[B-1]=tmp;
break;
case "resize":
int C=int.Parse(S[1]);
if (list.Count >= C){
list.RemoveRange(C, list.Count - C);
}
break;
case "reverse":
list.Reverse();
break;
}
}
foreach(var result in list){
Console.WriteLine(result);
}
}
}