a746
輸入說明 :
多组測資,以EOF结束。
每组測資第一行,有两個数字,即為题目所述之n,m(1≤n,m≤500)。
接下来m行,每行两個数字,表示第1...m個點在地(x,y)上。 保前 一個點和后一個點所确定的線段一定平行于圍欄的一邊。
輸出說明 :
對於每组测资输出一次。
用“-”和“|”圍出這塊地(当然是画过画之后的),這塊地分为nn个边>>长为1的小正方形,其中没有被画点或线的用“ ”表示,其餘用“”表示。
這題我當初看懂題意花了10分鐘,就是給你一個n*n的正方形,接著會有m個值(X,Y) 每一個值和上一個值連成一條線,這條線上的點都要算有算過
ex 給你一個4*4的正方形 第一個點給你(1,1),第二個點給你(1,4)表示從(1,1)到(1,4)劃一條線中間會經過(1,2) (1,3)
我這題主要參考Morris大的這篇,看懂後自己寫一遍,對每個讀進來的(x,y)和上一個(CurrentX, CurrentY)比較,假如還有不同的地方就+1 對每經過的格子填入1,output就是依序對值是1的做輸出'*' 是零的輸出空白
最後再把二維陣列歸零
#include <stdio.h>
int main()
{
int n,m;
while(scanf("%d %d", &n, &m)!=EOF)
{
int array[502][502] = {0};
int CurrentX, CurrentY;
int x, y;
int i, j;
scanf("%d %d", &CurrentX, &CurrentY);
m-=1;
while(m--)
{
scanf("%d %d", &x, &y);
while(CurrentX != x || CurrentY != y)
{
array[CurrentX][CurrentY] = 1;
if(CurrentX < x) CurrentX++;
if(CurrentX > x) CurrentX--;
if(CurrentY < y) CurrentY++;
if(CurrentY > y) CurrentY--;
}
array[CurrentX][CurrentY] = 1;
}
for(i=0; i<n+2; i++)
putchar('-');
printf("\n");
for(i=1; i<=n; i++)
{
putchar('|');
for(j=1; j<=n; j++)
printf("%c", (array[i][j])? '*' : ' ');
putchar('|');
printf("\n");
}
for(i=0; i<n+2; i++)
putchar('-');
printf("\n");
for(i=0; i<n; i++)
for(j=0; j<n; j++)
array[i][j]=0;
}
return 0;
}