[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 04/05 20:54 / Filesize : 366 KB / Number-of Response : 964
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

C/C++の宿題を片付けます 116代目



1 名前:デフォルトの名無しさん [2008/10/01(水) 07:28:51 BE:151474728-PLT(18888)]
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。

【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。

【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】 www.linux.or.jp/JM/index.html
【過去ログ検索】        chomework.sakura.ne.jp/
【wiki】               www23.atwiki.jp/homework/

前スレ
C/C++の宿題を片付けます 115代目
pc11.2ch.net/test/read.cgi/tech/1217741118/

914 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 02:50:51 ]
int gcd3(x, y, z){
return gcd( gcd(x,y), z);
}
で十分じゃない?


915 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 13:35:50 ]
>>906,907
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7887.txt
と思ったらタイムオーバー

916 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 14:34:52 ]
「入力された任意桁数(30桁以下)の整数に対し、各位の値を、配列を用意してそれに1つづつ格納する」のはどのようにするとスマートでしょうか・・・??

917 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 14:48:03 ]
>>916
スマートとか考えると後で意味不明のコーディングになる
forループでいいだろ

918 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 14:56:40 ]
自分でやってみましたが、powを使うとよく分からないことに・・・(泣)

言い方を変えて、<math.h>を極力使わないようにしたいです・・・

919 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 15:05:09 ]
for(i=0; i<30; i++){
arr[i] = n%10;
n /= 10;
}

920 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 15:17:13 ]
こんなに小さいプログラムでいいんですね(^^;

3時間かけて諦めた自分は何なんだろうorz

921 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 15:21:05 ]
30桁だから文字列だろ
#include <stdio.h>
int main(void)
{
char num[] = "123456789012345678901234567890";
int arr[30];
int i;
int c = strlen(num);
for (i = 0; i < c; i++)
{
arr[c - i - 1] = num[i] - '0';
}
for (i = 0; i < c; i++)
{
printf("%d ", arr[i]);
}
return 0;
}


922 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 15:23:21 ]
>>921
はいエラー



923 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 15:26:07 ]
いちいちstring.h使わんでも
forで0になるまで回せばいいじゃん。
>>919だと任意桁数ってのに合わないからね

924 名前:916 mailto:sage [2008/10/29(水) 16:01:52 ]
>>921
やはり>>916 の書き方が悪かったです…。
任意桁数の整数は、入力されたものを使うことになります。


925 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 18:08:16 ]
>>908
www.jitec.jp/1_04hanni_sukiru/mondai_kaitou_2008h20_2/2008h20a_fe_pm_qs.pdf
これの問6とほぼ一緒な感じか?
a,b,cに入るのは
a: /= 10
b: i % 3
c: i < j; i++, j--

正の整数に+をつけるなら、
if(minus != 0){
str[j++] = '-';
}
この付近に少しコードを付け足せばできると思う。

926 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 18:21:20 ]
>>925
すまん、勘違いした。
右詰めにするのか…。

927 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 18:41:54 ]
[1] 授業単元: プログラミング演習
[2] 問題文:1から50までの整数のうち,素数であるものを全て書き出すプログラムを,for文を用いて作成.
  出力結果は次のように横に並ぶようにする.

1 3 5 7 11 13 17 19 23 29 ・・・・

[3] 環境
 [3.1] OS: Windows Vista
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 11月4日 16:00まで
[5] その他の制限:2重ループを用いる。nの素数判断は,2〜n-1までの数で順にわり算して,全ての数で割り切れなければnは素数。
            for文までしか習ってないのでそのあたりを考慮して頂けたらありがたいです。よろしくお願いします。

928 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 18:47:04 ]
>>927
#include <stdio.h>
int main()
{
int i, j;
for (i = 1; i <= 50; ++i) {
for (j = 2; j <= i; ++j) {
if (j == i) {
printf("%d ", i);
} else if (i % j == 0) {
break;
}
}
}
putchar('\n');
return 0;
}


929 名前:928 mailto:sage [2008/10/29(水) 18:49:28 ]

int main()
{
int i, j;
for (i = 1; i <= 50; ++i) {
for (j = 2; j <= i - 1; ++j) {
if (i % j == 0) {
break;
}
}
if (j == i) {
printf("%d ", i);
}
}
putchar('\n');
return 0;
}

すいませんこっちのほうがま真っ当です

930 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 19:09:55 ]
[1] 授業単元: プログラミング基礎
[2] 問題文:




(以下の問題は、 算数にチャレンジ!! の中の 第559回問題 からの引用。)
1〜10の数が書かれたカードが1枚ずつ、全部で10枚あります。

今、これらのカードを並べ、隣り合った数の差を左から次々に加えていくことにします。例えば、

2,5,6,8,1,4,3,9,7,10
と並べたならば、
3+1+2+7+3+1+6+2+3=28
ということになります。
では、この計算結果が最も大きくなるようにカードを並べると、結果はいくらになるでしょうか。(問題終)

元の問題は算数の問題なので論理で答えを出すものだが、ここではプログラムを書いてその最大値を求めて欲しい。

[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 10月14日まで

よろしくおねがいします

931 名前:デフォルトの名無しさん [2008/10/29(水) 19:15:13 ]
大きい数字が中心で1や2は端がいいな

932 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 19:53:24 ]
一般化して100個でも出来るのがいいな



933 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 20:12:11 ]
プログラムって総当たりってこと?
結構時間かかりそうとおもったけど、10桁くらいなら余裕か…。

934 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 20:19:50 ]
>>933
おそらく総当りだと思います

935 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:09:12 ]
>>930
100個は無理。
#include<stdio.h>
#include<string.h>
#define M 10
unsigned int kaijyo(int k){unsigned int s=1; for(;k>0;k--)s*=k; return s;}
void retuprt(unsigned int *x){for(int n=0;n<M;n++)printf("%d ",x[n]);}
unsigned int sanowa(unsigned int *x){unsigned int s=0,n; for(n=0;n<M-1;n++)s+=x[n+1]>x[n]?x[n+1]-x[n]:x[n]>x[n+1];return s;}

main(){
unsigned int i,j,k;
unsigned int orgnum[M],num[M],jretu[M];
for(i=0; i<M; i++) orgnum[i]=i+1;
int max=0; unsigned int maxretu[M];
for(k=0;k<kaijyo(M);k++){
memcpy(num,orgnum,4*M);
int N=k;
for(i=M;i>=1;i--) {
int n=N % i; jretu[i-1]=num[n];
for(j=n;j<i-1;j++) num[j]=num[j+1];
N/=i;}
i=sanowa(jretu);
if(max<i){max=i;memcpy(maxretu,jretu,4*M);}
}
retuprt(maxretu); printf(" max=%d\n",max);
}

936 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:14:43 ]
最大値を与える列を求める

#include<stdio.h>
#include<string.h>
#define M 10
void retuprt(unsigned int *x){for(int n=0;n<M;n++)printf("%d ",x[n]);}
unsigned int sanowa(unsigned int *x){unsigned int s=0,n; for(n=0;n<M-1;n++)s+=x[n+1]>x[n]?x[n+1]-x[n]:x[n]>x[n+1];return s;}
main(){
unsigned int i,j,k;
unsigned int orgnum[M],num[M],jretu[M];
for(i=0; i<M; i++) orgnum[i]=i+1;
for(k=0;k<3628800;k++){
memcpy(num,orgnum,4*M);
int N=k;
for(i=M;i>=1;i--) {
int n=N % i; jretu[i-1]=num[n];
for(j=n;j<i-1;j++) num[j]=num[j+1];
N/=i;}
if(sanowa(jretu)==29){retuprt(jretu);printf("\n");}
}}

937 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:18:07 ]
プ

[4] 期限: 10月14日まで

938 名前:935 mailto:sage [2008/10/29(水) 21:21:55 ]
間違えた

939 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:23:28 ]
改めて>>877の問2)からどなたかお願いします。

問2)連結リストの先頭の次に、セルを一つ追加する関数を作成する。セルのelement
メンバの値は0 でよい。
つまり、cell1 → cell2 → cell3 → NULL
であるときに、この関数を1 回呼ぶと、
cell1 → (新しいセル) → cell2 → cell3 → NULL となるようにすればいい。

問3)連結リストの先頭の前に、セルを一つ追加する関数を作成せよ。セルのelement
メンバの値は0 でよい。
つまり、cell1 → cell2 → cell3 → NULL
であるときに、この関数を1 回呼ぶと、
(新しいセル) → cell1 → cell2 → cell3 → NULL となるようにすればいい。

自分なりに問2を進めてみたのですがvoid add_cell_secondをどう書いたらいいのでしょうか?
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7888.txt

940 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:24:28 ]
これって解が214176個もあるぞ。 問題として解答するなら30にならないことも示す必要あるな。

941 名前:940 mailto:sage [2008/10/29(水) 21:37:08 ]
まちがえた

942 名前:940 mailto:sage [2008/10/29(水) 21:40:22 ]
11まではなんとかもとまるが

#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;

unsigned int kaijyo(int k){unsigned int s=1; for(;k>0;k--)s*=k; return s;}
void retuprt(vector<unsigned char> &x){for(int n=0;n<x.size();n++)printf("%d ",x[n]);}
unsigned int sanowa(vector<unsigned char> &x){unsigned int s=0,n; for(n=0;n<x.size()-1;n++)s+=x[n+1]>x[n]?x[n+1]-x[n]:x[n]-x[n+1];return s;}

main(){
unsigned int M,K;
unsigned int i,j,k;
vector<unsigned char> orgnum,num,jretu;
for(M=2; M<20; M++) {
orgnum.resize(M),num.resize(M),jretu.resize(M);
for(i=0; i<M; i++) orgnum[i]=i+1;
int max=0;K=kaijyo(M);
for(k=0;k<K;k++){
memcpy(&num[0],&orgnum[0],M);
int N=k;
for(i=M;i>=1;i--) {
int n=N % i; jretu[i-1]=num[n];
for(j=n;j<i-1;j++) num[j]=num[j+1];
N/=i;}
i=sanowa(jretu);
if(max<i)max=i;
}
printf("M=%d max=%d\n",M,max);
}}



943 名前:930 mailto:sage [2008/10/29(水) 21:42:17 ]
>>935-936
ありがとうございました

944 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:42:45 ]
>>939
func(cell1)で次と前に新しいのを挿入する。
それぞれ先頭が帰ってくるが、こういうのでいいんだろうか。

struct cell *insert_next(struct cell *target)
{
struct cell *c1;
c1=(struct cell *) calloc(1, sizeof(struct cell));
c1->next=target->next;
target->next=c1;

return target;
}

struct cell *insert_prev(struct cell *target)
{
struct cell *c1;
c1=(struct cell *) calloc(1, sizeof(struct cell));
c1->next=target;

return c1;
}

945 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:46:33 ]
>>775です。

さっぱりわからないので少しだけでもお願いします。

[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
LU分解法を用いて、
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip
のmatrix2.datファイルを参照して、
その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。

AX=I(Iは単位行列)となることをしめしてください、

kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip
に含まれるmat_auxに含まれる補助関数を使ってください。

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: ([2008年11月6日まで]

946 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:47:57 ]
#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;

unsigned int kaijyo(int k){unsigned int s=1; for(;k>0;k--)s*=k; return s;}
void retuprt(vector<unsigned char> &x){printf("( ");for(int n=0;n<x.size();n++)printf("%d ",x[n]);printf(")");}
unsigned int sanowa(vector<unsigned char> &x){unsigned int s=0,n; for(n=0;n<x.size()-1;n++)s+=x[n+1]>x[n]?x[n+1]-x[n]:x[n]-x[n+1];return s;}

main(){
unsigned int M,K;
unsigned int i,j,k;
vector<unsigned char> orgnum,num,jretu,maxretu;
for(M=2; M<20; M++) {
orgnum.resize(M);num.resize(M);jretu.resize(M);maxretu.resize(M);
for(i=0; i<M; i++) orgnum[i]=i+1;
int max=0;K=kaijyo(M);
for(k=0;k<K;k++){
memcpy(&num[0],&orgnum[0],M);
int N=k;
for(i=M;i>=1;i--) {
int n=N % i; jretu[i-1]=num[n];
for(j=n;j<i-1;j++) num[j]=num[j+1];
N/=i;}
i=sanowa(jretu);
if(max<i){max=i;memcpy(&maxretu[0],&jretu[0],M);}
}
printf("\nM=%d max=%d ",M,max); retuprt(maxretu);
}}

947 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:49:43 ]
>>943

>>935は間違えているので、このように変更するように
x[n+1]>x[n]?x[n+1]-x[n]:x[n]-x[n+1];

948 名前:775 ◆00BY157eo6 mailto:sage [2008/10/29(水) 22:06:50 ]
>>775です。

さっぱりわからないので少しだけでもお願いします。

[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
LU分解法を用いて、
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip
のmatrix2.datファイルを参照して、
その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。

AX=I(Iは単位行列)となることをしめしてください、

kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip
に含まれるmat_auxに含まれる補助関数を使ってください。

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: ([2008年11月6日まで]

トリップつけました。

949 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 22:08:19 ]
>>929
ありがとうございました

950 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 22:09:28 ]
>>948
まずはテキストでうp

951 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 22:10:10 ]
>>944
ありがとう。そのinsert_nextとprevとfunc(cell1)を>>939のどこに入れたらいいんでしょうか?


952 名前:775 ◆00BY157eo6 mailto:sage [2008/10/29(水) 22:17:02 ]
>>950
テキストでファイル内容をうpしました。
ただ、できれば直接ファイルを参照して欲しいのですが…

[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
LU分解法を用いて、
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip
のmatrix2.datファイル(内容は)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7890.txt
を参照して、
その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。

AX=I(Iは単位行列)となることをしめしてください、

kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip
に含まれるmat_aux(内容は)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7889.txt
に含まれる補助関数を使ってください。

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: ([2008年11月6日まで]



953 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 22:34:57 ]
>>952
もう一度行列を復習してから書き込んでくれ
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7890.txt
の行列って正方行列じゃないだろ

954 名前:775 ◆00BY157eo6 mailto:sage [2008/10/29(水) 22:42:52 ]
>>953
あ、そうですね…

すいませんでした
一度ひっこみます

955 名前:775 ◆00BY157eo6 mailto:sage [2008/10/29(水) 22:50:53 ]
修正しました。

[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
LU分解法を用いて、
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip
のmatrix2.datファイル(内容は下のtxtにまとめました)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7892.txt

を参照して、
その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。

AX=I(Iは単位行列)となることをしめしてください、

kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip
に含まれるmat_aux(内容は)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7889.txt
に含まれる補助関数を使ってください。

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: ([2008年11月6日まで]

956 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 00:08:44 ]
>>930
面白い問題なので俺もやってみた。コマンドライン引数で要素数指定。
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7894.txt

N=10 Max=49( 1152件) time 0:00.62
N=11 Max=59(11520件) time 0:06.03
N=12 Max=71(28800件) time 1:13.19
N=13 おわらねぇ……てか落ちた!

CPU Q6600 2.4GHz
OS Win Vista Ulti 32bit


957 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 00:11:19 ]
なんか atexit する場所がへんだった。

958 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 00:40:43 ]
N=2n+1のときの解はたぶん、

n+2, n, 2n+1, n-1, 2n, n-2, 2n-1, n-3,…,n+3, 1, n+1
だな。
N=2nのときも似たようなもん。証明は知らない。

959 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 00:44:30 ]
N=2n+3とすると
n+3, n+1, N, n, N-1, n-1, N-2, n-2,…,n+4, 1, n+2
となり簡明か

960 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 01:01:09 ]
N=2nのときmaxは、2*n*n-1
N=2n+1のときmaxは、2*n*n+2n-1
だな。証明は知らない。

961 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 01:36:04 ]
>>930
面白い問題なのでオレも考えてみた。
で、解くためのアルゴリズムを見つけた。
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7895.txt
是非とも等角フォントで。

差の表を用いて考えれば
全部の数列の差を試さなくてすむし、一発で出来る

962 名前:930 mailto:sage [2008/10/30(木) 01:44:42 ]
>>961
絵はどうでもいいからCで書けよカス



963 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 01:56:47 ]
>>962
偽者だというのは分かるが、お前がキモイ・・・






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

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

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