1

IDE から実行するとうまく動作する次のプログラムを作成しました。inp.txtただし、ファイルから入力を取得してファイルに出力してテストしたい場合はout.txt、そうしません。


#include <stdio.h>
#include <stdlib.h>

struct node
{
  int data;
  struct node *next;
}*start;

void insertatend(int d)
{
  struct node *n;
  n=(struct node *)malloc(sizeof(struct node));
  n->data=d;
  n->next=NULL;

  if(start==NULL)
  {
    start=n;
  }

  else
  {
    struct node *tmp;
    for(tmp=start;tmp->next!=NULL;tmp=tmp->next);
    tmp->next=n;
  }
}

int max(int  a,int b)
{
  int c=(a>b)?a:b;
  return c;
}

int maxCoins(int n)
{
  int arr[n+1],i;
  arr[0]=0;
  arr[1]=1;
  arr[2]=2;
  arr[3]=3;

  if(n>2)
  {


    for(i=3;i<=n;i++)
    {
      int k= arr[(int)(i/2)]+arr[(int)(i/3)]+arr[(int)(i/4)];
      arr[i]=max(i,k);
    }
  }

  return arr[n];
}

int main(void)
{
  int coins,i;
  start=NULL;
  struct node*p;

  while(scanf("%d",&coins)>0)
  {
    insertatend(coins);
  }

  for(p=start;p!=NULL;p=p->next)
  {
    printf("%d\n",maxCoins(p->data));
  }

  getchar();

  return 0;
}

コマンド プロンプトで次の操作を実行しようとしましたが、ファイルByteTest.exe<inp.txt>out.txtは変更されませんout.txt

と入力して、プログラムへの入力を終了しますCTRL+Z。それはこれと関係がありますか?


inp.txt and out.txtたとえば、


inp.txt      out.txt

12             13
24             27
26             27
4

1 に答える 1

2

あなたの問題は次のとおりです。

while(scanf("%d",&coins)>0)

これは文字数を返します。ここではコインの値をチェックしていませんが、入力文字列の長さをチェックしています。

于 2012-07-18T21:08:10.280 に答える