3302328_ac_0ms_208k.c

来自「北大大牛代码 1240道题的原代码 超级权威」· C语言 代码 · 共 59 行

C
59
字号
#include <stdio.h>
#include <string.h>

#define MIN(a,b) ((a)<(b)?(a):(b))

int kase=0;
int n,t;
int account[32];
char name[32][32];

int read_case()
{
  int i,j,k,amount;
  char name1[30],name2[30];

  scanf("%d %d",&n,&t);
  if (n==0 && t==0) return 0;
  for (i=0; i<n; i++)
    {
      scanf("%s",name[i]);
      account[i] = 0;
    }
  for (k=0; k<t; k++)
    {
      scanf("%s %s %d\n",name1,name2,&amount);
      for (i=0; strcmp(name1,name[i]); i++);
      for (j=0; strcmp(name2,name[j]); j++);
      account[i] -= amount;
      account[j] += amount;
    }
  return 1;
}

void solve_case()
{
  int src,dst,transfer;

  printf("Case #%d\n",++kase);
  while (1)
    {
      for (src=0; src<n; src++)
	if (account[src]>0) break; /* person who has to pay found */
      for (dst=0; dst<n; dst++)
	if (account[dst]<0) break; /* person who receives money found */
      if (src==n || dst==n) break;
      transfer = MIN(account[src],-account[dst]);
      account[src] -= transfer;
      account[dst] += transfer;
      printf("%s %s %d\n",name[src],name[dst],transfer);
    }
  printf("\n");
}

int main()
{
  while (read_case()) solve_case();
  return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?