トップページ⇒tech
1001コメント358KB

宿題手伝います

■ このスレッドは過去ログ倉庫に格納されています
0001RinaNGNG
夏休みなので厨対策に新スレ立てました.
前スレ:http://pc3.2ch.net/test/read.cgi/tech/1026138039/

前スレより抜粋.

1 :かおる :02/07/08 23:20
こんにちは。えれなの妹のかおるです。

前スレは恭祐さんの「ほう、宿題とはな。」です。
http://pc.2ch.net/test/read.cgi/tech/1024592344/
それ以前の人たちは、>>2-10あたりにかかれるでしょう。

宿題とか手伝いますけど、以下の事項は守ってほしいです。
・マルチポストは厳禁です。
・キーワードが分かっているなら、http://www.google.co.jp を活用すること
・質問内容がちゃんと日本語になっていること
・言語名を入れること。
・自分の力で頑張ってみたことを伝えられる人。
・どこまでわかったのかを書くこと。
以上です。このスレだけのおつきあいですが、よろしくおながいします。

2 :デフォルトの名無しさん :02/07/08 23:21
手助けはするな、助言はしてやれ。

3 :かおる :02/07/08 23:22
登場人物&過去スレ 1/2

●お姉さん
あなたの宿題、お姉さんが答えます
http://piza.2ch.net/tech/kako/972/972032579.html
で登場。

●麻衣
お兄ちゃんの宿題、私が答えるよ
http://pc.2ch.net/tech/kako/982/982853418.html
で初登場。可愛い妹キャラ

●お兄ちゃん(名称不明)
宿題見てやるよ
http://pc.2ch.net/tech/kako/1003/10038/1003838158.html
で初登場。しかし、女性がいいという影の圧力により
1以外には登場せず。

●怜
宿題みてあげるっ
http://pc.2ch.net/test/read.cgi/tech/1007902384/l50
で初登場。お兄ちゃんの恋人。
結構親切に答えてくれる年上キャラ。
0159154NGNG
>>158
よろしくおながいします。

ご飯食べてくるのでしばらく消えます。
0160デフォルトの名無しさんNGNG
double ans = pow(2.0, 50.0);
じゃだめなの?
0161デフォルトの名無しさんNGNG
cout << 2i64*2*2*2*2*2*2*2*2*2*
    2*2*2*2*2*2*2*2*2*2*
    2*2*2*2*2*2*2*2*2*2*
    2*2*2*2*2*2*2*2*2*2*
    2*2*2*2*2*2*2*2*2*2 << endl;
0162 ◆aCDPDEl2 NGNG
>>160 それでいいっぽい。
0163デフォルトの名無しさんNGNG
8503589813642624になったけど
#include <stdio.h>
#include <math.h>

#define SIZE 10
#define VAC 100000
typedef int bignum[SIZE];

void regular_bignum(bignum n)
{
int i;
for (i=0; i < SIZE-1; i++)
if (n[i] >= VAC) {
n[i+1] += n[i] / VAC;
n[i] %= VAC;
}
}

void write_bignum(bignum n)
{
int i = SIZE-1;

regular_bignum(n);

for (; i>=0; i--)
if (n[i] != 0) {
printf("%u", n[i]);
i--;
break;
}
for (; i>=0; i--)
printf("%05u", n[i] % VAC);
printf("\n");
}

void make_bignum(bignum b, int n)
{
int i;

b[0] = n;
for (i=1; i < SIZE; i++)
b[i] = 0;
}

0164163NGNG

void mul(bignum b, int n)
{
int i;

for (i=0; i<SIZE; i++) {
b[i] *= n;
regular_bignum(b);
}
}

int main(void)
{
int i;
bignum b;

make_bignum(b, 1);

for(i=0; i<50; i++)
mul(b, 2);

write_bignum(b);

return 0;
}
0165 ◆aCDPDEl2 NGNG
1125899906842624じゃない?
0166163NGNG
間違えた。
下ので
1125899906842624
になったす。
void mul(bignum b, int n)
{
int i;

for (i=0; i<SIZE; i++)
b[i] *= n;
regular_bignum(b);
}
0167デフォルトの名無しさんNGNG
sizeof long long == 8 な環境なので

#include <stdio.h>

int main()
{
printf("%lld\n", 1LL<<50);
}

をやったら 1125899906842624 となりますた。
関数電卓でやっても 1.125899e+15 です。

163 は下の方が一致してるよね。上位桁の扱いに問題がありそう。
0168デフォルトの名無しさんNGNG
うわ、書いてる間にちゃんと訂正されてた。鬱。
0169 ◆aCDPDEl2 NGNG
次はまだか?
0170デフォルトの名無しさんNGNG
>>149 遅レスすみません。やっと自分のミスがわかりました!ありがとうございました!
0171デフォルトの名無しさんNGNG
<!--#exec cgi="counter.cgi"--> をもとに、画像の数字を使ったカウンターは
どう作ればいいんですか?
0172デフォルトの名無しさんNGNG
星スタンプで宿題免除です。
0173デフォルトの名無しさんNGNG
↑ロリ発見
0174デフォルトの名無しさんNGNG
解るヤシも同類。

モチロンオレモナー
0175 ◆aCDPDEl2 NGNG
俺の分かる(Cの易しいやつ)宿題カモーン
0176デフォルトの名無しさんNGNG
切羽詰ってます。助けてください!
3×3のマスの中にチェスのナイトが置かれている。
(1) 3×3の配列aを定義して、すべての要素を0に初期化。ナイトの位置は1で、空欄は0で配列に記録。
スクリーン上には、□で空欄を、★でナイトの現在位置を表示する。(ナイトの最初の位置はプログラマーが選択してよい)
(2) チェスのナイトは、将棋の桂馬と同じ動きをするが、前だけでなく左右や後ろにも桂馬飛びができる。
そこで、3×3の配列bとcを宣言して、それぞれに現在位置(i,j)から移動できるマスの番号を2桁の整数で入力する。
移動できるマスが(3,1)ならば31と入力する。(この問題では移動できるマスは常に2つなので配列bとcを使います。)
(3) 現在のナイトがいる配列bの要素を10で割った商と余りを利用して、移動できるマスを(i,j)の形でプリントする。
同様に、配列cの要素をプリントする。
(4) ユーザーからの入力を読み、上の(3)で求めた(i,j)のどちらかならばナイトを移動して、新しい状態をプリントする。
入力が-1,-1ならばプログラムを終了する。
(5) 上の(3)と(4)を繰りかえす。
条件:配列aを引数として、現在ナイトがいる場所をプリントする関数を作製すること。
0177 ◆aCDPDEl2 NGNG
うっ!問題の意味がわからない。
0178154NGNG
みなさまありがとうございます。

>>160
doubleでできるんですね。。。

>>163
いまいち理解できてませんが、ありがとうございます。
これからじっくり読みます。
0179デフォルトの名無しさんNGNG
>>176
で、どう助けろと??
0180 ◆aCDPDEl2 NGNG
(2) チェスのナイトは、将棋の桂馬と同じ動きをするが、前だけでなく左右や後ろにも桂馬飛びができる。
そこで、3×3の配列bとcを宣言して、それぞれに現在位置(i,j)から移動できるマスの番号を2桁の整数で入力する。
移動できるマスが(3,1)ならば31と入力する。(この問題では移動できるマスは常に2つなので配列bとcを使います。)

ここの意味が分からん。
0181デフォルトの名無しさんNGNG
とりあえずナイトを真中に置いたら手詰まりだってことはわかった。
0182デフォルトの名無しさんNGNG
>>176
よし、助け船を出そう。

こう回答しとけ。
「設計自体が悪いので却下します」

それが角が立つので嫌だというならこういうのもあるぞ。
「一体貴方はプログラマを育成したいのですか?
それともキーパンチャーを育成したいのですか?」
0183デフォルトの名無しさんNGNG
どうでもいいけど、コード貼り付ける時
全角スペースで字下げしてくれないかなぁ…
読み辛いです
ダメならいいけどさ
0184145NGNG
>>149 3個目の点の値を入力して実行すると値が変わるんですけどどうすればいいですか?
0185 ◆aCDPDEl2 NGNG
paiの値をより正確にすればいいと思う。
0186デフォルトの名無しさんNGNG
ナップサック問題です。「総重量が与えられた値以下という制約の中で、価値の和を最大にするように荷物を選択する」というものです。

問題1
荷物| a  b  c  d  e
――+――――――――――
重量| 4 5 2 1 6
価値|450 570 225 110 670


重量制限8
ってな感じです。


解けます?ほかのスレから持ってきたんだけど解答がでなくて…

ttp://pc3.2ch.net/test/read.cgi/tech/1027353004/
で、いくつかプログラムが出てるんですけど、いかがでしょうか?
こちらの方のほうがスキルありそうなので…
0187デフォルトの名無しさんNGNG
マルチスレッドかマルチプロセスどちらかを使ってCでシェルソート作れ
って言われたんですがCでマルチスレッドってどうやるんですか?

調べてみたら、内のNTくんだとforkという関数?を
使えるらしいところまでは分かりました。

また、シェルソート自体のコードは検索して見つけたので
printfを使いながら力技で勉強中です。
0188デフォルトの名無しさんNGNG
>>180
こういう事だと思われ。
しかし、やる気が失せるぐらい(出題者の)センスが悪いな。

int a[3][3]={
1,0,0,
0,0,0,
0,0,0,
};

int b[3][3]={
12, 2,12,
20,-1, 0,
21, 0,10,
};
int c[3][3]={
21,22, 1,
22,-1, 2,
10,20, 1,
};
0189デフォルトの名無しさんNGNG
すごいと思われるjava appletを作って!
0190 ◆aCDPDEl2 NGNG
>>188 なるほど。
0191デフォルトの名無しさんNGNG
>>189
それが宿題か?
0192デフォルトの名無しさんNGNG
>>191 いえす。
0193デフォルトの名無しさんNGNG
>>186
キーワード「線形計画法」でいくらでもでてくるYO!!
http://lecture.ecc.u-tokyo.ac.jp/~okatu/planning/30lp.html
とか
0194デフォルトの名無しさんNGNG
>>193
あれ? ナップザック問題って「線形計画法」で解くんだっけ?
0195デフォルトの名無しさんNGNG
>>194
動的計画法では?
0196デフォルトの名無しさんNGNG
動的
0197195NGNG
かぶった
しかも、レス付け間違えた
0198デフォルトの名無しさんNGNG
>>186

#include <stdio.h>

#define LIMIT 8
#define N 5
#define MIN_SIZE 1

void main(void)
{
 static struct body
 {
  char *name;
  int size;
  long price;
 } a[]={{"a",4,450},{"b",5,570},{"c",2,225},
    {"d",1,110},{"e",6,670}};

 long newvalue,value[LIMIT+1];
 int item[LIMIT+1],i,s,p;

 for(s = 0;s <= LIMIT;s++)
 {
  value[s]=0;
 }

 for(i = 0;i < N;i++)
 {
  for(s = a[i].size;s <= LIMIT;s++)
  {
   p = s - a[i].size;
   newvalue = value[p] + a[i].price;
   if(newvalue > value[s])
   {
    value[s] = newvalue;
    item[s]=i;
   }
  }
 }

 printf(" 品 目 重量 価格\n");
 for(s = LIMIT,p=0;s >= MIN_SIZE;s-=a[item[s]].size)
 {
  printf("%10s %5d %5ld\n",a[item[s]].name,a[item[s]].size,a[item[s]].price);
  p += a[item[s]].size;
 }
 printf(" 合 計 %5d %5ld\n",p,value[LIMIT]);
}

参考文献:改訂 C言語によるはじめてのアルゴリズム入門(河西朝雄 著,技術評論社)
0199 ◆aCDPDEl2 NGNG
#include<stdio.h>

int main(void){
int i,j,x,y,next;

int a[3][3]={{1,0,0},
{0,0,0},
{0,0,0}};
int b[3][3]={{12,20,10},
{2,-1, 0},
{2, 0, 1}};
int c[3][3]={{21,22,21},
{22,-1,20},
{12, 2,10}};

while(1){
for(i=0;i<3;i++){
for(j=0;j<3;j++){
if(a[i][j]==0){ printf("□"); }
else{
x=i;
y=j;
printf("★");}
}
printf("\n");
}

for(i=0;i<3;i++){
for(j=0;j<3;j++){
if(a[i][j]==1) printf("(%d,%d)",b[i][j]/10,b[i][j]%10);
}
}
printf("\n");

for(i=0;i<3;i++){
for(j=0;j<3;j++){
if(a[i][j]==1) printf("(%d,%d)",c[i][j]/10,c[i][j]%10);
}
}
printf("\n next : ");

scanf("%d",&next);

if(next==b[x][y]){
a[x][y]=0;
a[b[x][y]/10][b[x][y]%10]=1;
}else if(next==c[x][y]){
a[x][y]=0;
a[c[x][y]/10][c[x][y]%10]=1;
}else if(next==-1)break;
}
return 0;
}
0200デフォルトの名無しさんNGNG
長いですがお願いします。どうしてもわかりません。助けてください。
データが0と1しか含まないと仮定して以下の方法で圧縮されたデータを解凍
するプログラムを作成してください。
圧縮前 0 0 0 1 1 1 0 0 0 0
圧縮後 3 , 3 , 4 \n

1、読んだ数字の数を数えるカウンターの値を1に初期化して、文字を読む前
  に整数型の変数numを0に初期化します。
2、データは3,3,4のようにカンマ区切りでファイルに記憶されており、左端
  は必ず0から始まっているいるものとしています。従って入力データの種類
  は以下の3種類です。
  (1)1から9までの数字
  (2)カンマ
  (3)行末記号。EOLともよばれ、\nのことです。
  そこで、getcharコマンドで、入力データの1行目を1文字ずつ読み取ります。
  読んだ文字がカンマか行末記号で無い間は、numを10倍した値に、呼んだ文字を
  数字に変更して加えます。(読んだ文字を数字に変更するには、文字の'0'を引きます。)
   num=0×10+5(numの値は5になります)
   num=5×10+9(numに値は59になります)
3、読んだ数字を配列aに代入し、カウンターの値に1を加えます。
4、読んだ文字が行末記号になるまで2から3までを繰り返します。
5、配列aの要素の値だけ、0や1を交互にプリントとします。データが入っている配列の要素数
  は、カウンターで数えてあります。
6、上の方法を繰り返して後19行処理しています。(入力データファイルには20行のデータが
  あります。)
7、配列aを引数といて、0もたは1の数をプリントする関数を作成してください。
8、サンプルデータsample3を入力としてプログラムを実行してください。

サンプルデータ
62,
35,4,23
30,14,18
32,2,6,2,20
33,2,4,2,21
34,2,2,2,22
34,6,12,4,6
1,5,26,4,2,4,8,2,3,2,5
6,4,20,5,4,5,5,2,5,2,4
11,3,14,4,10,4,2,2,7,2,3
13,5,9,3,14,5,9,2,2
16,4,5,3,18,3,10,2,1
18,9,20,4,8,2,1
20,6,22,4,6,2,2
22,4,22,4,3,3,4
23,4,20,8,7
25,3,18,3,13
28,4,10,4,16
32,10,20
62
    
0201すごい手抜きNGNG
>>189
public class sugoi extends java.applet.Applet {}
0202デフォルトの名無しさんNGNG
>>185 それでもなりませんでした。たとえばx=5,y=6と入れれば(5,6)と出るはずなんですが
(0.50・・,0.86・・)となるんですが・・・
0203 ◆aCDPDEl2 NGNG
>>202 θの値は?
0204デフォルトの名無しさんNGNG
>>203 30度です。
0205 ◆aCDPDEl2 NGNG
θ=30なら、(5,6)→(7.696857, 1.326041)になるけど?
0206デフォルトの名無しさんNGNG
sin30=0.5
cos30=0.86・・・
0207 ◆aCDPDEl2 NGNG
>>206 何を言ってるのかさっぱりわからん。

何を求めたいんだ?(5、6)という点がθ=30のときに
どこへ移るかを求めるんじゃないの?
0208デフォルトの名無しさんNGNG
>>205それが3つめの点のときだけx=5,y=6といれても(5,6)→(7.69,1.32)とならずに
(0.5・・,0.86・・)→(1.000,0.000)になるんです。
0209デフォルトの名無しさんNGNG
int data[MAX_DATA];
int data_n;
int f=1;

while(data_n){
  for(i=0;i<data[data_n];i++){
    printf("%d ",f);
  }
  data_n--;
  f ^= 1;
}
0210 ◆aCDPDEl2 NGNG
(0.5・・,0.86・・)→(1.000,0.000)でいいんじゃない?
0211デフォルトの名無しさんNGNG
>>210そうなんですか?しばらく考えてみます。
0212デフォルトの名無しさんNGNG
>>211
float a[2][3],b[2][2],c[2][3],theta,phi;
↓
float a[3][2],b[2][2],c[3][2],theta,phi;
0213デフォルトの名無しさんNGNG
>>212どうもです!次々とすみませんが、配列a,b,cを引数として、配列cに
   データを代入する関数を使うにはどうすればいいんですか?
0214 ◆aCDPDEl2 NGNG
void asdf(float a[2][3], float b[2][2] , float c[2][3]){
int i;
for(i=0;i<3;i++){
c[i][0]=b[0][0]*a[i][0]+b[0][1]*a[i][1];
c[i][1]=b[1][0]*a[i][0]+b[1][1]*a[i][1];
}
}

asdf(a,b,c);
0215デフォルトの名無しさんNGNG
>209
f~=1が渋めだけどdata_nの初期化が抜けてるやん 70点
0216名無しのだれかさん。NGNG
宿題のソースはここに置いてね
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433

スレ立ててみました。良かったら使ってくださいませ。

かなり長いソースでもOK。全角スペースで再インデントする必要もなし!
添付ファイルもできちゃうゾ!
0217デフォルトの名無しさんNGNG
198さんのとおりにやったんだけど、うまくいきませんでした。
んで自分でちょっといじくったらセグメンテーション違反って結果が。。。

初心者で申し訳ないのですが、一体どうすればいいのでしょうか?
0218デフォルトの名無しさんNGNG
>>214
>>149もそうだけど、なしてa[2][3]にするの?
0219 ◆aCDPDEl2 NGNG
>>218 別に[3][2]でもいいけど
行列を考えたときそのほうがわかりやすかったからでふ。
0220 ◆aCDPDEl2 NGNG
なんかおかしぃ
0221213NGNG
>>214関数の入れ方がわからないんですけど・・・。すみません。
0222 ◆aCDPDEl2 NGNG
[3][2]のほうがわかりやすいね。
0223 ◆aCDPDEl2 NGNG
#include <stdio.h>
#include <math.h>
#define pai 3.14

void asdf(float a[3][2], float b[2][2] , float c[3][2]){
int i;
for(i=0;i<3;i++){
c[i][0]=b[0][0]*a[i][0]+b[0][1]*a[i][1];
c[i][1]=b[1][0]*a[i][0]+b[1][1]*a[i][1];
}
}

int main(void){
int i;
float a[3][2],b[2][2],c[3][2],theta,phi;
for(i=0;i<3;i++){
printf("%d個目の点を入力してください\n x = ",i+1);
scanf("%f",&a[i][0]);
printf(" y = ");
scanf("%f",&a[i][1]);
}
printf("θ = ");
scanf("%f",&theta);
phi=(pai*theta)/180.0;
b[0][0]=cos(2*phi);
b[0][1]=sin(2*phi);
b[1][0]=sin(2*phi);
b[1][1]=-cos(2*phi);

/* for(i=0;i<3;i++){
c[i][0]=b[0][0]*a[i][0]+b[0][1]*a[i][1];
c[i][1]=b[1][0]*a[i][0]+b[1][1]*a[i][1];
}*/


asdf(a,b,c);
for(i=0;i<3;i++){
printf("(%10f,%10f)→(%10f,%10f)\n",a[i][0],a[i][1],c[i][0],c[i][1]);
}

return 0;
}

これであってるかな?
0224213NGNG
>>223ありがとうございます!助かりました!
0225グチNGNG
C使いはじめてから十数年、全部構造体の配列でやってるなぁ。
だから、多次元配列なんて一度も使ったこと無いんだ。

だいたい、ミスってても分かりづらいからバグの温床になるんだよな。
経験上、他人のソースをレビューしてて真っ先に注目するのってソレ。
一番ありがちなのは次元を間違えて別領域書き潰し。
スタックぶっ潰してるから、関数から戻ったときに訳のわからんアクセス
違反でアボート。

Cではヤメにしない?多次元配列。
移植性損なわずに、ベクトル演算できるわけでもなし。
少なくとも宿題レベルで必要無いと言い切りたい。
0226225 改行規制くらったNGNG

例えば >>223 のソースならこんな風にさ。

#include <stdio.h>
#include <math.h>
#define pai 3.14

typedef struct {
float x;
float y;
} point;

typedef struct {
float a00,a01,a10,a11;
} matrix;

void asdf(point pnt[3], matrix mat , point res[3]){
int i;
for(i=0;i<3;i++){
res[i].x = mat.a00*pnt[i].x+mat.a01*pnt[i].y;
res[i].y = mat.a10*pnt[i].x+mat.a11*pnt[i].y;
}
}

int main(void){
int i;
float theta,phi;
matrix mat;
point pnt[3];
point res[3];
for(i=0;i<3;i++){
printf("%d個目の点を入力してください\n x = ",i+1);
scanf("%f",&pnt[i].x);
printf(" y = ");
scanf("%f",&pnt[i].y);
}
printf("θ = ");
scanf("%f",&theta);
phi=(pai*theta)/180.0;
mat.a00 = cos(2*phi);
mat.a01 = sin(2*phi);
mat.a10 = sin(2*phi);
mat.a11 = -cos(2*phi);

asdf(pnt,mat,res);
for(i=0;i<3;i++){
printf("(%10f,%10f)→(%10f,%10f)\n",
pnt[i].x, pnt[i].y, res[i].x, res[i].y );
}

return 0;
}
0227デフォルトの名無しさんNGNG
あ、宿題の元テキスト >>145 見たら配列使うような指示が・・・
0228名無しのだれかさん。NGNG
>>226

>>216 に貼れば改行制限がゆるいし、インデントも保持されるよ。
0229デフォルトの名無しさんNGNG
2次元くらいなら問題ないと思うけどね。図にもできるし。
3次元以上は使わないけど。
まあ、実際のメモリを考えると2次元もおかしいんだけど。
0230200NGNG
200ですがどなたかおねがいします・・・
0231デフォルトの名無しさんNGNG
>>226
俺がその問題解いてたときは
#define SIZE 2
typedef float point[SIZE];
typedef float matrix[SIZE][SIZE];
ってして、point関係の関数作ってあまり考えなくても
いいようにしてたよ。
0232231NGNG
>>200 いまからやってみるよ。
0233名無しさん@XEmacsNGNG
>200

君にはPythonで十分だ。

foo.py
----------------------------------------------
import sys
import string

for line in sys.stdin.readlines():
list = string.split(string.strip( line ) , ',' )
even = 1
for data in list:
even += 1
sys.stdout.write( chr( ord('0' ) + even % 2 ) * int(data) )
sys.stdout.write( '\n' )
-----------------------------------------------
data.txt
62
35,4,23
30,14,18
32,2,6,2,20
33,2,4,2,21
34,2,2,2,22
34,6,12,4,6
1,5,26,4,2,4,8,2,3,2,5
6,4,20,5,4,5,5,2,5,2,4
11,3,14,4,10,4,2,2,7,2,3
13,5,9,3,14,5,9,2,2
16,4,5,3,18,3,10,2,1
18,9,20,4,8,2,1
20,6,22,4,6,2,2
22,4,22,4,3,3,4
23,4,20,8,7
25,3,18,3,13
28,4,10,4,16
32,10,20
62

-------------------------------
python foo.py < data.txt
0234デフォルトの名無しさんNGNG
>>200
じゃC++
#include <iostream>
#include <string>
#include <algorithm>
#include <iterator>
#include <boost/tokenizer.hpp>
#include <boost/lexical_cast.hpp>

main(){
std::string s ;
while(std::getline(std::cin,s,'\n'),std::cin){
bool f=false ;
typedef boost::tokenizer<boost::char_separator<char> > tokenizer ;
boost::char_separator<char> sep(",") ;
tokenizer tok(s,sep) ;
for(tokenizer::iterator ti=tok.begin();ti!=tok.end();ti++,f=!f) try {
std::fill_n(std::ostream_iterator<bool>(std::cout),boost::lexical_cast<int>(*ti),f) ;
} catch(...) {}
std::cout << std::endl ;
}
}
0235200NGNG
>>233 >>234 Cは・・・?
0236デフォルトの名無しさんNGNG
>200
じゃあ、Ruby

while line = gets
  i = 1
  puts line.split(',').map{|n| i *= -1; (i == 1 ? '1' : '0') * n.to_i}.join
end
0237231NGNG
やっとできた。ループがカッコ悪いのでだれか直して。
#include <stdio.h>
#define SIZE 10000

int a[SIZE];
int counter = 1;

void write_a(int *a)
{
int i, j, x=0;

for (i=1; i<counter; i++) {
for (j=a[i]; j--;)
printf("%d ", x);
x = (x) ? 0 : 1;
}
printf("\n");
}

int main(void)
{
int ch;
int num;

do {
counter = 1;
do {
num = 0;
while ((ch = getchar()) != ',' && ch != '\n' && ch != EOF) {
num *= 10;
num += ch - '0';
}
a[counter++] = num;
} while (ch != '\n' && ch != EOF);
write_a(a);
} while (ch != EOF);

return 0;
}
0238デフォルトの名無しさんNGNG
>>200
#include <stdio.h>
#include <ctype.h>

int main(){
int c, prev=0 ;
int flag=0 ;
while(c=getchar(),c!=EOF){
if(isdigit(c))
prev = prev*10+(c-'0') ;
else if(c==',' || c=='\n') {
while(prev--) printf("%d",flag) ;
prev = 0 ;
flag = !flag ;

if(c=='\n') {
printf("\n") ;
flag = 0 ;
}
}
}
return 0 ;
}
0239238NGNG
しまった配列を使えというのか
0240 NGNG
>>200
じゃ、awk。

BEGIN{FS=","}
{
for (i = 1; i <= NF; i++)
for (j = 0; j < $i; j++)
printf("%d", 1 - (i % 2));
print "";
}
0241デフォルトの名無しさんNGNG
>>237
こんなところか。ただ、ファイルの末尾が\nでないと最終行が出力されない既知のバグあり(w
#include <stdio.h> 
#define SIZE 10000 

static int a[SIZE]; 

void write_a(int *a, int counter) 
{ 
  int i, j, x=0; 

  for (i=0; i < counter; i++) { 
    //    printf("%d ", a[i]); 
    for (j = 0; j < a[i]; j++)
      printf("%d", x); 
    x = (x) ? 0 : 1; 
  } 
  printf("\n"); 
}

int main(void) 
{ 
  int ch; 
  int num = 0; 
  int counter = 0; 

  while ((ch = getchar()) != EOF) {
    switch (ch) {
    case ',':
      a[counter++] = num;
      num = 0;
      break;
    case '\n':
      a[counter++] = num;
      write_a(a, counter);
      counter = 0;
      num = 0;
      break;
    default:
      num *= 10; 
      num += ch - '0';
      break;
    }
  }
  return 0; 
} 
0242名無しさん@XEmacsNGNG
んじゃ pike

int main()
{
while(string s=Stdio.stdin.gets()){
string x;
int count = 1;
foreach( s/",",x ){
count++;
write( (string)(count%2) * (int)x );
}
write("\n");
}
}

0243241NGNG
つか、もう全然違うものになってしまったな(w
しかもバグ取りに使ったprintf残ってるし(恥
0244Rina ◆tI333vNE NGNG
夜中に目が覚めてチラっと見にきたらレスの数がが増えまくってる…。
おそるべし2ch…。
0245241NGNG
>>244
ちみも>>200の問題をC以外で解きなされ(w
0246デフォルトの名無しさんNGNG
java applet つくって。
0247デフォルトの名無しさんNGNG
>>176

#include <stdio.h>

int a[3][3]={{1,0,0},
{0,0,0},
{0,0,0}};
int b[3][3]={{12,20,10},
{2,-1, 0},
{2, 0, 1}};
int c[3][3]={{21,22,21},
{22,-1,20},
{12, 2,10}};

void print_moveto(int b[3][3], int x, int y)
{
printf("(%d,%d)", b[x][y] / 10, b[x][y] % 10);
}

void print_knight(void)
{
int i, j, x=3, y=3;

for (i=0; i<3; i++) {
for (j=0; j<3; j++)
if (a[i][j] == 1) {
x = i; y = j;
printf("★");
} else {
printf("□");
}
printf("\n");
}

printf("move to ");
print_moveto(b, x, y);
printf(" or ");
print_moveto(c, x, y);
printf(".\n");
}
0248246NGNG

int check(int b[3][3], int x, int y)
{
int i, j;

for (i=0; i<3; i++)
for(j=0; j<3; j++)
if (a[i][j] == 1) {
return (b[i][j] / 10 == x) && (b[i][j] % 10 == y);
}

return 0;
}

void move(int x, int y)
{
int i, j;

for (i=0; i<3; i++)
for(j=0; j<3; j++)
a[i][j] = 0;

a[x][y] = 1;
}

int moveto(void)
{
int x, y;

scanf("%d,%d", &x, &y);

if (x == -1 && y == -1)
return 0;

if (check(b, x, y)) { move(x, y); return 1;}
if (check(c, x, y)) { move(x, y); return 1;}

printf("cannot move to (%d,%d).\n", x, y);

return 1;
}

int main(void)
{
do print_knight();
while (moveto());

return 0;
}
0249248=247NGNG
間違えた。
0250Rina ◆tI333vNE NGNG
import java.io.*;
import java.util.*;

public class Main {
public static void main(String[] args)
throws Exception {
BufferedReader in = null;
{
FileReader fr = new FileReader(args[0]);
in = new BufferedReader(fr);
}

String line;
while( (line = in.readLine()) != null ) {
int c = 0;

StringTokenizer token = new StringTokenizer(line, ",");
while( token.hasMoreTokens() ) {
String tmp = token.nextToken();
int n = Integer.parseInt(tmp);
for (int i = 0 ; i < n ; i++) {
System.out.print( (c % 2) );
}

c++;
}
System.out.println();
}

}
}

これでいいの?
最早Javaとは呼べないソース…w
実行は
  $ java Main sample
でどうぞ。
0251デフォルトの名無しさんNGNG
>>246
>>201 なんかどだ?
0252 ◆JAPH9PWA NGNG
Perlはまだだよね。
#!perl
$\ = "\n";
while(<>)
{
my $i = 1;
print join '', map { $i ^= 1; ($i ? 1 : 0) x $_ } split /,/;
}
0253デフォルトの名無しさんNGNG
すみません。課題なのですが全くわかりません。誰か教えてください。お願いします。
データが0と1しか含まないと仮定して、以下の方法でプログラムを作成し
てください。
getcharコマンドで、入力データの1行目を読み取り、配列aに代入(1行に38文字あるが、最後の1文字は改行文字と仮定)してカウンターの値を1に初期化する。<最初に読んだ文字(a[0]の値)が続いている間は、カウンタ
ーの値輪1ずつ増やして読んだ文字が今までと違った(文字の連続が終わっ
た)時点でカウンターの値をプリントして1の場合にはそのまま数字をプリ
ントして0の場合には、符号をマイナスにしてプリントする。カウンター
の値を1に再初期化>して<>の間を繰り返す。2行目以降を同時に処理し
てください。
条 件:・配列aを引数として、0または1の数をプリントする関数を作成してください。
・サンプルデータは
 0000000000000000111100000000000000000
 0000000000011111111111111000000000000
 0000000000001100000000110000000000000
 0000000000000111000011100000000000000
 0000000000000011100111000000000000000
 0000000000000011100111000000000000000
 0000000000000001111110000000000000000
 0000000000000001111110000000000000000
 0000000000000111111111100000000000000
 0000000000011111000011111000000000000
 0000000001111000000000011110000000000
 0000000011100000000000000111000000000
 0000001110000000000000000001110000000
 0000111100000000000000000000111100000
 0001111000000000000000000000011110000
 0001111000000000000000000000011110000
 0000111100000000000000000000111100000
 0000001110000000000000000001110000000
 0000000001111111111111111111000000000
 0000000000000111111111100000000000000
 0000000000000000000000000000000000000

#include<stdio.h>
int main(void)
{
int i, j ,counter;
int a[20][38];
char ch;

for(i=0; i<21; i++){
for(j=0; j<38; j++){
a[i][j]=getchar();
}}
for(i=0; i<21; i++){
for(j=0; j<38; j++){
printf("%c",a[i][j]);
}}}

このプログラムの後に1行目は0が16個、1が4個、0が17個であるので16,4,17というように表示したいのですがで
きません。
16,4,17
11,14,12
:
:
:
:
と表示したいのです。どうぞお願いします。
0254241NGNG
>>253
貴様、>>200だな(w
にしても「getcharコマンド」てのはなんかイヤな呼び方だなあ。
getchar関数か(実装にもよるが)getcharマクロと呼んでほしい。
出題者のセンス悪いぞ。

とかいってる間に解いてみようかな。

あ、そうそう、

for(i=0; i<21; i++){
for(j=0; j<38; j++){
a[i][j]=getchar();
}}

なんかの部分、最後の}}はよしとけ。ひとつずつ改行しとけ。
あとインデントちゃんとやってる?
つまり、

for(i=0; i<21; i++){
  for(j=0; j<38; j++){
    a[i][j]=getchar();
  }
}

みたいに書けってこと。
0255254NGNG
う。名前が残ってた。
0256200NGNG
>>237>>238>>241遅レスすみません。きちんと解いてくれた方ありがとうございました。
微妙に嫌がらせしてくれた方、微妙におもしろかったです!
0257200NGNG
>>254どうも!241さん!(w
   そうですね。今度からそうします!
   この問題もよろしくおねがいします!
 
0258デフォルトの名無しさんNGNG
186のナップサック問題を未だに悩んでるんですが、198さんのプログラムを参考にいじってたらわけわかんなくなりました…

実行してもセグメンテーション違反と表示されてしまいます。
↓僕がいじったものを修正してくださいませんか?

#include <stdio.h>

#define LIMIT 8
#define NUMBER 5
#define MIN_SIZE 1

struct nimotu
 {
  char *name;
  int size;
  int price;
 } data[]={{"a",4,450},{"b",5,570},{"c",2,225},
    {"d",1,110},{"e",6,670}};

int main(void)
 int newvalue,value[LIMIT+1];
 int item[LIMIT+1],i,s,p;

 for(s = 0;s <= LIMIT;s++)
 {
  value[s]=0;
 }

 for(i = 0;i < N;i++)
 {
  for(s = data[i].size;s <= LIMIT;s++)
  {
   p = s - data[i].size;
   newvalue = value[p] + data[i].price;
   if(newvalue > value[s])
   {
    value[s] = newvalue;
    item[s]=i;
   }
  }
 }

 printf(" 品 目 重量 価格\n");
 for(s = LIMIT,p=0;s >= MIN_SIZE;s-=data[item[s]].size)
 {
  printf("%10s %5d %5d\n",data[item[s]].name,data[item[s]].size,data[item[s]].price);
  p += data[item[s]].size;
 }
 printf(" 合 計 %5d %5d\n",p,value[LIMIT]);
}

できればコメントつけていただくとうれしいのですが…
■ このスレッドは過去ログ倉庫に格納されています