[表示 : 全て 最新50 1-99 101- 201- 301- 2chのread.cgiへ]
Update time : 05/09 21:47 / Filesize : 118 KB / Number-of Response : 352
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【C,C++】 ちょっと問題解いて行け 【勉強】



1 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 01:16:00 ]
他人のソースを読むことは非常に勉強になります。
と言うわけで、初心者〜プロの方まで様々な人が書いたソースを見て、より良いプログラムを作れるようになろうと言う目論見です。
問題は未来アンカーで踏んだ人が空気を読んだ問題を出しましょう。

解答ソースを貼る人用テンプレ
【C言語歴】 (例)4年
【レベル】 (例)初心者、プロ、学校で習った程度 など
【コンセプト】 (例)処理速度重視、可読性重視、容量重視 など
【コメント】 (例)みっくみくにしてやんよ。など、有れば

長すぎるソースはこちらへ
ttp://codepad.org/

宿題は C/C++の宿題片付けます 130代目へ
pc12.2ch.net/test/read.cgi/tech/1250204272/
相談は C言語なら俺に聞け(入門篇)Part54などへ
pc12.2ch.net/test/read.cgi/tech/1254829314/

330 名前:319 mailto:sage [2010/05/27(木) 08:19:39 ]
>>326
16進数のASCII文字列を読み込んで、その内容をバイナリーでファイルに出力だ。
gets()して、それは捨てるって書いて無いよ。
デフォルトで使うだろうと予想してたけど。

331 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 08:43:08 ]
>>319
だからきちんと問題書けよ。つーか、課題丸投げなんだろ。宿題スレに逝けよ。

332 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 23:13:26 ]
>>330
問題文を短くしてgets()を使わなければ突っ込まれないと短絡的に考えたのだろうが
あいにくURLエンコーディングには英数字の平文が混ざるので16進数ではないし
実装を比べるスレの趣旨からしてscanf()を指定する必然性も全くないし
URLデコードは文字列から文字列への変換なんだからバイナリーとか発してる時点で馬科決定。
関数の使い方もコンピュータ用語も理解してないレベルで出題するなよ。




333 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 00:32:43 ]
#include <stdio.h>
#define ENOUGH_LONG_LENGTH 24
int main(void)
{
  char buf[ENOUGH_LONG_LENGTH];
  FILE *fp;
  int miyazaki = 0xefBeadDe;

  strcpy(buf, "ef Be ad De");
  fp = fopen("test.txt", "wb");
  fwrite(&miyazaki, sizeof(int), 1, fp);
  fclose(fp);
  return 0;
}

334 名前:デフォルトの名無しさん mailto:sage [2010/05/30(日) 10:54:03 ]
お題 (次>>350) 文字コードに関係の無いURLデコード
%と16進文字2桁を標準入力(コマンド引数、ファイル以外)から入力して、
バイナリーに変換し、test.txtファイルに落とす。
%の後に2桁の16進文字が続かない場合は、変換しないでそのまま出力する。
例:
%Y %0X ⇒ 出力無し
%Y0 ⇒ '0'出力
%00 ⇒ '\0'出力
%Aa01 ⇒ '\xaa' '0' '1'出力

335 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 09:13:37 ]
>>281 日本語でオス
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::vector;
const int NUM_SIZE = 5;
int main()
{
  int i, temp = 0, sum = 0;
  vector<int> intContiner;

  cout << "5つ数を入力して下さい。" << endl;
  for( i = 0 ; i < NUM_SIZE ; ++i ) {
  // 上のfor文内でiを宣言するなら、sumやtempも移動すべき場所があるべきだろう。
    cout << i + 1 << "番目入力" << endl;
    cin >> temp;
    intContiner.push_back( temp );
  }

  cout << "5つ数の合計" << endl;
  vector<int>::iterator itr = intContiner.begin();
  for( ; itr != intContiner.end() ; ++itr ) {
    sum += *itr;
  }
  cout << sum << endl;

  cout << "5つ数の平均" << endl;
  cout << sum / NUM_SIZE << endl;
}

336 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 17:16:25 ]
>>335
>282

337 名前:デフォルトの名無しさん [2010/06/06(日) 15:00:48 ]
問題:
ジョンにとって縁起のいい数字は4と7で,
他はどうでもいい.ラッキーナンバーとは,
縁起のいい数字を含んだ10進数である.
整数aとbが与えられたとき,aとbの間にあるラッキーナンバーの個数を挙げよ.

オブジェクトの定義:
クラス名 : TheLuckyNumbers
メソッド名 : count
引数の型 : int,int
返値の型 : int
メソッドの表記 : int count(ints,intb)
として,公的メソッドとせよ.
注:
aの値は1から1,000,000,000まで
bの値は1から1,000,000,000まで

TopCoderでグーグル先生に聞いたら出てきた問題を適当に張ってみる

338 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 19:38:26 ]
a〜b=(1〜b)−(1〜a){a,b:a<b}
ここまで分かった。



339 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 18:49:53 ]
>>337
できたぞ
#include <iostream>
#include <cmath>
using namespace std;

class TheLuckyNumbers
{
public:
int count(int s, int b);
};

int TheLuckyNumbers::count(int s, int b)
{
int digits=0,temp;
int k=0;
if(s<1 || s > 1000000000 || b<1 || b > 1000000000) return 0;
for(int i=s;i<=b;i++)
{
temp=i;
while(temp){digits++;temp/=10;}
temp=i;
while(digits)
{
if(temp % 10 == 4 || temp % 10 == 7) k++;
temp/=static_cast<int>(pow(10.0,digits));
digits--;
}
}
return k;
}

340 名前:339 [2010/06/12(土) 19:07:36 ]
temp/=static_cast<int>(pow(10.0,digits));
digits--;

じゃなくて

temp/=static_cast<int>(pow(10.0,--digits));
だな。

341 名前:339 mailto:sage [2010/06/12(土) 19:25:34 ]
全然間違ってた
while(digits)
{
if(temp % 10 == 4 || temp % 10 == 7) k++;
temp/=10; digits--;
}
で最後だ

342 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 10:22:47 ]
if(s<1 || s > 1000000000 || b<1 || b > 1000000000) return 0; は必要。
始めにdigitを求め無くても、tempを10で割って行ったら0になる、
そうするともっと早い修正になる。

343 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 10:55:40 ]
>>341
7777とかだと一つの数字で+4されないか?

344 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 11:27:16 ]
>>343
そうだな
7777→1個だな
まぁすぐ直せるだろうけど

345 名前:344 mailto:sage [2010/06/13(日) 11:51:22 ]
#include <iostream>
using namespace std;

class TheLuckyNumbers
{
public:
int count(int s, int b);
};

int TheLuckyNumbers::count(int s, int b)
{
if(s<1 || s > 1000000000 || b<1 || b > 1000000000) return 0;

int digits=0,temp;
int k=0;
for(int i=s;i<=b;i++)
{
temp=i;
while(temp)
{
if(temp % 10 == 4 || temp % 10 == 7){ k++; break;}
temp/=10;
}

}
return k;
}

346 名前:342 mailto:sage [2010/06/13(日) 12:25:23 ]
temp%10は2回やる必要なくてtmp=temp%10とかで、俺もやった。

347 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 13:13:26 ]
Javaで貼ってもよかとですか?

348 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 13:24:40 ]
>>347
リンクならOK
本体は
pc12.2ch.net/test/read.cgi/tech/1268003943/l1



349 名前:347 mailto:sage [2010/06/13(日) 13:33:56 ]
ほい

pc12.2ch.net/test/read.cgi/tech/1268003943/674

350 名前:348じゃばじんすげえ mailto:sage [2010/06/13(日) 14:47:13 ]
class TheLuckyNumbers {
public: inline
  static int count(int a, int b) {
    if (a < 1 || a > 1000000000 || b < 1 || b > 1000000000 || a > b) return 0;
    return count(b) - count(a - 1);
  }
private: inline
  static int count(int a) {
    int result = 0, digits/*=0*/, add = 0;
    if ((digits = search(a)) != 0) {
      result = a % digits; a -= result; result += 1;
    }
    digits = 1;
    while (a != 0) {
      for (int i = 0, j = a % 10; i < j; i++) {
        result += (i == 4 || i == 7) ? digits : add;
      }
      a /= 10; add = add * 8 + digits * 2; digits *= 10;
    }
    return result;
  }
private: inline
  static int search(int a) {
    int result = 0;
    for (int digits = 1; a != 0; digits *= 10, a /= 10) {
      if (a % 10 == 4 || a % 10 == 7) {
        result = digits;
      }
    }
    return result;
  }
};

351 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 00:35:58 ]
>>350
コメントくらい書こうぜ。
つーか、問題文にはsの方がbより小さいとは書いてないみたいだけれど。

>>337
再帰でやってみた。
codepad.org/3FZQcU4D






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<118KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef