菜鸟BIT程序设计课A题日志第一周

要声明的是这几篇在BIT程设课期间写的,水平非常有限,算是自娱。

 

我也只能说些自身教训了,仅供菜鸟共勉。

第一题RPWT。看到第一题N多人提交数比后几题还多便深感RP重要性。输入方面大循环里scanf读入此次猜的数字,然后gets回答。结果缓冲区里回车被gets读入于是百度在gets之前加了fflush(stdin);清空缓冲区,忘了可以getchar()也不知道可以scanf(“\n”);之后琛神告知这种方法用不多且全清空可能会引起错误。之后就是字符串比较高了存一个数组,低的存另一个,两组循环判断如果答案比高的高或者比低的低就都会输出没RP。于是就WA了第二个。纠结几番觉得如果Jerry很二Tom5低了他猜3,结果Tom说高了,然后他猜4,对了,按之前的就会输出两个没RP,于是若有输出便标记一下,搞定。

描述

Tom 和 Jerry 做猜数字的游戏,Tom 想一个数字然后让 Jerry 去猜,数字的范围在 1 到 10 之间。对于 Jerry 每讲的一个数,Tom 都要讲这个数是 too high 或者 too low 或者 right on,直到 right on 结束。为了防止 Tom 作弊,Jerry 把每一次的对话记录下来,现在让你去判断 Tom 有没有作弊。

输入

游戏可能做很多次,直到 Jerry 猜 0 的时候游戏结束,每一次猜测由一个正整数和一行回答组成。

输出

对每一次游戏如果 Tom 的回答有自相矛盾的地方,就输出 Tom is dishonest,否则输出 Tom may be honest。

#include"stdio.h"
#include"string.h"
int main()
{
 int number=0,high[100]={0},i=0,low[100]={0},j=0,count=0,flag=0;
 char check[50]="";
 do
 {
  scanf("%d",&number);
  fflush(stdin);
  if(number<=10&&number>=1)
  {
   gets(check);
  }
  else
  {
   break;
  }

  if(strcmp(check,"too high")==0)
  {
   high[i]=number;
   i++;
  }
  else if(strcmp(check,"too low")==0)
  {
   low[j]=number;
   j++;
  }
  else if(strcmp(check,"right on")==0)
  {
   for(count=0;count    {
    if(high[count]<=number&&flag!=1)
    {
     printf("Tom is dishonest\n");
     flag=1;
     break;     
    }
   }
   for(count=0;count    {
    if(number<=low[count]&&flag!=1)
    {
     printf("Tom is dishonest\n");
     flag=1;
     break;
    }
   }
   if(flag==0)
   {
    printf("Tom may be honest\n");
   }
   memset(check, 0, 50);
   memset(high, 0, 100);
   memset(low, 0, 100);
   i=0;
   j=0;
  }
  flag=0;
 }while(number!=0);
 return 0;
}

 

第二题Vito's Familiy我果断想起教父,英文题就把题意搞错了,算了半天距离却输出的是可住的门牌号,而且不懂他只能住其中一个亲戚家,果断霸气让他任选一号住。英文差的伤不起。

Background

The world-known gangster Vito Deadstone is moving to New York. He has a very big family there, all of them living in Lamafia Avenue. Since he will visit all his relatives very often, he is trying to find a house close to them.

Problem

Vito wants to minimize the total distance to all of them and has blackmailed you to write a program that solves his problem.

Input

The input consists of several test cases. The first line contains the number of test cases.

For each test case you will be given the integer number of relatives r ( 0 < r < 500) and the street numbers (also integers) s0, s1, ..., si, ..., sr where they live ( 0 < si < 30000 ). Note that several relatives could live in the same street number.

Output

For each test case your program must write the minimal sum of distances from the optimal Vito's house to each one of his relatives. The distance between two street numbers si and sj is dij= |si-sj|.

#include"stdio.h"
#include"math.h"
int main()
{
 int times=0,n=0,number=0,i=0,j=0,streetno[500]={0},minus=0,compare[500]={0},flag=0,temp=0;
 long int result=0;
 scanf("%d",×);
 for(n=0;n  { scanf("%d",&number);
 for(i=0;i  {scanf("%d",&streetno[i]);
 }
 for(i = 0;i  { minus = 0;
 for(j = 0;j < number;j++)
    {minus = fabs(streetno[i]-streetno[j]) + minus;
    }
    compare[i] = minus;
 }
 minus=429496729;
 for(j=0;j  {if(compare[j]   {minus=compare[j];
  }
 }printf("%d\n",minus);
 } 
 return 0;
}

第三题图形编辑器http://acm.uva.es/p/v102/10267.html真纠结。除了各种模拟麻烦外,改相反的坐标就改半天,当然耗时最长的是F指令。开始觉得可以循环判断目标点上下左右是否和原颜色相同,是就改色,直到填满,后来想到边界情况判断麻烦循环次数多就硬着头皮上递归。交上之后所有F指令用例RE。请教琛神一眼看出递归停止条件边界只判断了右边界和下边界。补上后倒数第二个保密RE。边逛讨论区边乱改,用getchar替代scanf处理垃圾数据,检查相同颜色染色,存位图名数组改大,输入格式检查,检查输入坐标超I指令规定范围……继续染红几次后终于A了。

#include
#include
int x,y,x1,y1,x2,y2,c=0,r=0,judge[300][300];
char command,color,graph[300][300],name[300]="";
int min(int a,int b)
{
    if(a>b)
 {
  a=b;
 }
    return a;
}
void Fill(int i,int j,char origin,char color)
{
     if(graph[i][j]!=origin||judge[i][j]||!c||!r)
  {
   return;
  }
     judge[i][j]=1;
     graph[i][j]=color;
     Fill(i-1,j,origin,color);
     Fill(i+1,j,origin,color);
     Fill(i,j-1,origin,color);
     Fill(i,j+1,origin,color);
}
int main()
{
    int temp;
    do
    {
       scanf("%c",&command);
       if(command=='I')
       {
          scanf("%d %d\n",&c,&r);
          for(int i=1;i<=r;i++)
             for(int j=1;j<=c;j++)
    {
     graph[i][j]='0';
    }
       }
    else if(command == 'C')
       {
          for(int i=1;i<=r;i++)
             for(int j=1;j<=c;j++)
    {
     graph[i][j]='0';
    }
       }
       else if(command=='L')
       {
          scanf("%d %d %c\n",&x,&y,&color);
          if(y<=r && x<=c)
             graph[y][x]=color;
       }
    else if(command=='V')
       {
          scanf("%d %d %d %c\n",&x,&y1,&y2,&color);
          if(y1>y2)
    {
     temp=y1;
     y1=y2;
    

你可能感兴趣的:(ACM)