LL Golf Hole 5 - 最上位の桁を数え上げる
Posted feedbacks - C++
ちょっと不格好かなぁ…。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <iostream>
void count(int n)
{
int d = 1;
int i = 0;
while(i <= n)
{
std::cout << i << std::endl;
i += d;
if((i / (d * 10) > 0))
{
d *= 10;
}
}
}
int main(int, char* [])
{
count(300);
return 0;
}
|
標準入力に対応させてみました
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <iostream>
#include <cstdlib>
#include <cstring>
void func(int m, int n = 0)
{
char buf[BUFSIZ];
int i = 1;
int size = ::strlen(::itoa(n, buf, 10)) - 1;
std::cout << n << std::endl;
while(size--) i *= 10;
if(m > n) return func(m, n+i);
}
int main(int argc, char* argv[])
{
argc == 2 ? func(::atoi(argv[1])) : func(300);
}
|
mattsanさんの#7145を参考に標準入力に対応しつつgolf化. 164bytes. 改行5,空白4省略可で実質155bytes 本当はoperator<()を定義してcout<cin とかやりたかったけど、短さを優先しました。
1 2 3 4 5 6 7 | #include<iostream>
using namespace std;
void f(ostream&o,istream&i){
int c=0,d=1,n;i>>n;
while(c<=n)o<<c<<"\n"&&(c+=d)&&c/d/10&&(d*=10);
}
main(){f(cout,cin);}
|
別関数に分けずにベタでmain内に書いたほうがよっぽど短かった orz というわけで元コードは自分で-1. 116btyes.実質109bytes
1 2 3 4 5 | #include<iostream>
main(){
int c=0,d=1,n;std::cin>>n;
while(c<=n)std::cout<<c<<"\n"&&(c+=d)&&c/d/10&&(d*=10);
}
|




takano32
#7116()
[
Ruby
]
Rating1/3=0.33
与えられた自然数までの数え上げを行います。ただし、繰り上がりが起こったときは最上位の桁のみを数え上げます。また、与えられる自然数には0以外の桁が2回以上登場してはいけません。たとえば、300を入力として与えられた場合は以下のような出力となります。
与える自然数についてはリテラルで与える、標準入力で与える、引数で与えるなどは自由とします。
※LL Future実行委員の高野光弘です。この出題は LL Future公式の出題であり、優れたものについてはLL Golfのセッションでご紹介させていただくかもしれません。ご理解の上、ご投稿ください。また、LL Futureのチケットは現在も発売中です。よろしければ、メインイベントの方にもぜひご参加ください。
Rating1/3=0.33-0+
[ reply ]