paizaのCランク獲得問題の解答がなかったので、備忘録として残します。
明らかに簡単な問題の場合は省略しますが、個人的に少しでも考えたコードを残していきたいと思います。
初心者ですので醜いコードを書きますが、温かい目で見守っていただけると嬉しいです。
また、より良い記述方法などありましたら、コメント等で教えていただけると嬉しいです。
目次
- 未知数個の数の受け取り
- 奇数だけ出力
- カウント変数を使った計算
- 2 で何回割れる?
- 10 進数から 2 進数に変換
- 10 進数から M 進数に変換
- N が M ずつ増えたときにいつ K を越える?
- 毎日増加するお金
- 階乗の計算
- 階乗の末尾に 0 はいくつ付く?
- 加算された数列の最大値
- 1 はどこにある?
- 約数の個数
- 約数の列挙
未知数個の数の受け取り
using System;
using System.Linq;
class Program
{
public static void Main()
{
int []a=Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
foreach(var result in a){
Console.WriteLine(result);
}
}
}
題意は満たしていません。分からなかったです。。
次の問題も同じです。
奇数だけ出力
using System;
using System.Linq;
class Program
{
public static void Main()
{
int N=int.Parse(Console.ReadLine());
int []a=Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
for(int i=0;i<N;i++){
if(a[i]%2==1){
Console.WriteLine(a[i]);
}
}
}
}
割り切れる数だけ出力もほぼ同じです。
偶奇の判定もやること同じです。
各桁の和
using System;
class Program
{
public static void Main()
{
int N=int.Parse(Console.ReadLine());
int sum=0;
while(0<N){
sum+=(N%10);
N=(N/10);
}
Console.WriteLine(sum);
}
}
調べて出てきました
10で割った余りが1の位の値になり、商をNに置き換える
これを繰り返すと各桁の和を計算することが出来る。
2 で何回割れる?の問題もこの考えで解けます。
カウント変数を使った計算
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();
for(int i=0;i<N; i++){
Console.WriteLine(M[i]*(i+1));
}
}
}
2 で何回割れる?
using System;
class Program
{
public static void Main()
{
int N=int.Parse(Console.ReadLine());
int count=0;
while(N%2==0){
N=(N/2);
count++;
}
Console.WriteLine(count);
}
}
任意の数で何回割れる?も同じです。
10 進数から 2 進数に変換
using System;
class Program
{
public static void Main()
{
int N=int.Parse(Console.ReadLine());
string N2=Convert.ToString(N,2);
Console.WriteLine(N2);
}
}
Convertを使いました、題意に沿っていません。
10 進数から M 進数に変換
using System;
using System.Collections.Generic;
class Program
{
public static void Main()
{
string []NM=Console.ReadLine().Split();
int N=int.Parse(NM[0]);
int M=int.Parse(NM[1]);
List<int> list =new List<int>();
while(N>0){
list.Add(N%M);
N=N/M;
}
list.Reverse();
foreach(int result in list) {
Console.Write(result);
}
}
}
N が M ずつ増えたときにいつ K を越える?
using System;
class Program
{
public static void Main()
{
string []NMK=Console.ReadLine().Split();
int N=int.Parse(NMK[0]);
int M=int.Parse(NMK[1]);
int K=int.Parse(NMK[2]);
int count=0;
while(N<=K){
N=N+M;
count++;
}
Console.WriteLine(count);
}
}
毎日増加するお金
using System;
class Program
{
public static void Main()
{
string []AB=Console.ReadLine().Split();
int A=int.Parse(AB[0]);
int B=int.Parse(AB[1]);
int count=0;
while(A<=B){
int increase=(int)(A*0.1);
A+=increase;
count++;
}
Console.WriteLine(count);
}
}
階乗の計算
using System;
class Program
{
public static void Main()
{
int N=int.Parse(Console.ReadLine());
int result=1;
for(int i=1;i<=N;i++){
result*=i;
}
Console.WriteLine(result);
}
}
階乗の末尾に 0 はいくつ付く?
using System;
using System.Collections.Generic;
class Program
{
public static void Main()
{
int N=int.Parse(Console.ReadLine());
int count=0;
for(int i=5;i<=N;i++){
int num=i;
while(num%5==0){
count++;
num/=5;
}
}
Console.WriteLine(count);
}
}
5が何個あるか数えるのと同義です。
加算された数列の最大値
using System;
using System.Linq;
class Program
{
public static void Main()
{
int N=int.Parse(Console.ReadLine());
int []a=Console.ReadLine().Split().Select(int.Parse).ToArray();
int []result =new int[N];
for(int i=0;i<N;i++){
result[i]=a[i]+i+1;
}
Console.WriteLine(result.Max());
}
}
加算された数列の最小値もやることは同じです
1 はどこにある?
using System;
using System.Linq;
class Program
{
public static void Main()
{
int N=int.Parse(Console.ReadLine());
int []a=Console.ReadLine().Split().Select(int.Parse).ToArray();
for(int i=0;i<N;i++){
if(a[i]==1){
Console.WriteLine(i+1);
}
}
}
}
約数の個数
using System;
class Program
{
public static void Main()
{
int N=int.Parse(Console.ReadLine());
int count=0;
for(int i=1;i<=N;i++){
if(N%i==0){
count++;
}
}
Console.WriteLine(count);
}
}
約数の列挙
using System;
class Program
{
public static void Main()
{
int N=int.Parse(Console.ReadLine());
for(int i=1;i<=N;i++){
if(N%i==0){
Console.WriteLine(i);
}
}
}
}