質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

523閲覧

結果を逆順に表示したいです。

john010

総合スコア9

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2021/07/13 07:49

自分が出したい結果が逆順に出力されます。
プログラムの内容は以下のとおりです。
n個の正整数 a1......anと n個の正整数 が入力されたとき、この ai (1<= i <= n)のいくつかの和bを作ります。例えば、3,2,8,7,4で12を作ることを考えたら、3+2+7 = 12 or 8+4 = 12とできます。

入力 5 12 3 2 8 7 4 出力 YES 3 2 7 (ここが 7 2 3 になります)

C

1#include <stdio.h> 2#include <stdlib.h> 3 4int main(){ 5 int n,b,i,j; //正整数b, n個の正整数a 6 int *dp,*a; 7 scanf("%d",&n); 8 scanf("%d",&b); 9 10 a = (int *)malloc(n * sizeof(int)); 11 dp = (int *)malloc(b * sizeof(int)); 12 13 for(i = 1; i<= b ;i++) dp[i] = -1; 14 15 for(i = 0; i< n ;i++) scanf("%d",&a[i]); 16 17 for(i = 0;i < n; i++){ 18 for(int j = b-1;j >= 0; j--){ 19 if(dp[j]!=-1){ 20 if(a[i] + j <= b && dp[a[i] + j] == -1){ 21 22 dp[a[i] + j] = a[i]; 23 24 } 25 } 26 } 27 } 28 29 if(dp[b]==-1){ 30 31 printf("ERROR\n"); 32 return 0; 33 } 34 35 printf("YES\n"); 36 37 int ans = b; 38 39 while(1){ 40 printf("%d ",dp[ans]); 41 ans = ans - dp[ans]; 42 if(ans == 0)break; 43 } 44 45 printf("\n"); 46 return 0; 47}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2021/07/13 09:57

とりあえず > dp = (int *)malloc(b * sizeof(int)); だと1個分足りない. あと,dp[0]にちゃんと-1でない値を入れとくべきでは.
jimbe

2021/07/13 10:10

結果を別配列にでも入れて逆順にするのではダメなのでしょうか。
guest

回答1

0

ベストアンサー

とりあえず答えは出ていて,現状と逆順に表示したいということであれば,
至極単純には,表示したいものをバッファに貯め込んでおいて,それを逆側から順に表示すれば良いかと.

C++

1... 2 3int ans = b; 4 5int *results = (int*)malloc( n * sizeof(int) ); //出力すべき整数値を貯め込む場所 6int nResult = 0; //貯め込んだ個数 7 8while (1) { 9 results[nResult++] = dp[ans]; //表示せずに貯め込む 10 ans = ans - dp[ans]; 11 if (ans == 0)break; 12} 13 14//貯め込んだ整数値を逆順で表示 15for( i=nResult-1; i>=0; --i )printf( "%d ", results[i] ); 16 17...

投稿2021/07/13 10:05

fana

総合スコア11708

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2021/07/13 10:06

逆順にする話と無関係な,コードの怪しい箇所については「質問への追記・修正、ベストアンサー選択の依頼」の方に書きました.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問