Untitled
unknown
c_cpp
a year ago
2.2 kB
13
Indexable
#include <stdio.h>
int main() {
// Read in the arguments
int L, D;
scanf("%d %d", &L, &D);
// Loop through all the i,j pair of the output, print the grid one by one
for (int i = 0; i < 2*L-1; i++) {
for (int j = 0; j < 2*L-1; j++) {
// Caculate the absolute value in distance of i
int difference_in_i = i - (L-1);
if (difference_in_i < 0)
difference_in_i *= -1;
// Caculate the absoulte value in distance of j
int difference_in_j = j - (L-1);
if (difference_in_j < 0)
difference_in_j *= -1;
// Calculate manhhaten distance
int distance2middle = difference_in_i + difference_in_j;
// We start from observing the middle point, we want to know what is the mapping
// between Depth to the alphabet.
// This is a example:
// L = 6 V (L-1)
// Depth : 0 1 2 3 4 5 6 7 8 9 10
// alpha : A B C D E F E D C B A
// We discovered that we can use the distance to the middle point,
// to calculate what alphabet we should print in the middle.
// alpha : A B C D E F E D C B A
// distance : 5 4 3 2 1 0 1 2 3 4 5
// So the distance should be calcuated like this:
int distance = D - (L-1);
if (distance < 0)
distance *= -1; // Taking absolute value
// If the value is out of the range (Out of the crystal, the alphabet is not between A to Z),
// then we should print a space.
// A brief explaination of what we've caculated is as below:
// (L-1-distance): The shift of the middle alphabet
// distance2middle: The shift of the alphabet of current grid
if ((L-1-distance) - distance2middle >= 0)
printf("%c", 'A' + ((L-1-distance) - distance2middle) % 26);
else
printf(" ");
}
// A new line
printf("\n");
}
return 0;
}Editor is loading...
Leave a Comment