Excel 주소(아날로그), 회귀 그림

3723 단어 시뮬레이션
Excel 셀의 주소는 열 번호를 알파벳으로 표시하는 흥미로운 것을 나타낸다.예를 들어 A는 1열, B는 2열, Z는 26열, AA는 27열, AB는 28열, BA는 53열을 나타낸다.물론 Excel의 최대 열 번호는 한계가 있기 때문에 전환하는 것은 어렵지 않다.만약 우리가 이런 표현법을 일반화하고 싶다면, 매우 큰 숫자를 매우 긴 자모 서열로 바꿀 수 있습니까?이 제목은 입력한 숫자에 대응하는 Excel 주소 표시 방식을 출력해야 한다는 것이다.
입력
숫자 입력
출력
대응하는 excel 주소
샘플 입력
26가지 출력 Z 힌트는 둔하다. 이것은 약간 진법 관계일 뿐만 아니라 완전히 그렇지도 않다.마지막 2위는 1로 26, 마지막 3위는 1로 26*26으로 비뚤어진 것 같다. 알파벳 서열에서 숫자를 돌리면 괜찮은데 거꾸로 하면 좀 귀찮은데 컴퓨터가 빨리 뛴다.
확인:
다이렉트 루프와 약간 차이가 있어요.
n%26==0이면 진입이 필요 없고 Z를 출력하면 됩니다.
ac:
#include
#define ll long long
using namespace std;

stack sk;

int main()
{
    ll n;
    scanf("%lld",&n);
    int q=0,c;
    while(n)
    {
        c=n%26;
        n=n/26;
        if(c==0)
        {
            sk.push('Z');
            n--;
        }
        else{
            sk.push(c+'A'-1);
        }
    }
    while(!sk.empty())
    {
        printf("%c",sk.top());
        sk.pop();
    }
    printf("
"); return 0; }

링크:https://ac.nowcoder.com/acm/contest/67/G출처: 우객망
시간 제한: C/C++ 1초, 기타 언어 2초 공간 제한: C/C++ 32768K, 기타 언어 65536K 64bit IO Format:%lld
제목은 동그라미 동그라미를 묘사한다. 루루 어린이는 최근에 희양양을 많이 본다. 자꾸 자극을 받으면 동그라미를 그린다. 8보다 작은 숫자를 들을 때 매우 규칙적인 동그라미를 그린다. 지금은 샘플에 따라 규칙을 관찰하고 프로그램을 작성하며 입력한 숫자 n(n<8)에 따라 대응하는 동그라미를 출력해야 한다.
입력 설명: 첫 번째 줄은 샘플 T(T<9) 2에서 2+T-1 줄마다 정수 n(n<8)이 있습니다. 루가 들은 숫자 출력 설명: 대응하는 숫자를 들었을 때 대응하는 모양의 원을 출력합니다.예제 1
입력 복사
4 0 1 2 3 출력 복제
O  O O O  O     O    O O     O  O     O O O   O O  O     O     O    O O     O              O             O O              O           O     O          O O   O O           O     O              O             O O              O     O                 O    O O               O O     O                 O  O     O           O     O O O   O O         O O   O O  O     O           O     O     O                 O    O O               O O     O                 O              O             O O              O           O     O          O O   O O           O     O              O            O O O 는 n=0 시 출력 O n = 1 시 출력 * O O * O * O * O n = 2 시 출력 * * O * O * O * O * O * O * O * O * O * O * O * O * O * O * O * O * O * O * * O 위의 "O"는 대문자 O이고 "*"는 공백을 나타내며 각 줄의 마지막 O 뒤에 공백이 없습니다.비고: 100%의 데이터에 대해 0<=n<8;확인:
반복으로 O 표시
맨 오른쪽 끝에 있는 O를 뒤로 옮겨다니며 표시합니다.
그리고 출력을 반복합니다.
ac:  
#include
using namespace std;
int t,n;
char mp[3001][3001];
int vis[3001];
 
void dfs(int c,int x,int y)
{
    if(c==0)
    {
        mp[x][y]='O';
        return ;
    }
    int d=pow(3,c-1);
    dfs(c-1,x,y-d);
    dfs(c-1,x-d,y);
    dfs(c-1,x+d,y);
    dfs(c-1,x,y+d);
}
 
int main()
{
    scanf("%d",&t);
    while(t--)
    {
        memset(mp,0,sizeof(mp));
        scanf("%d",&n);
        dfs(n,(3*pow(3,n-1)+1)/2,(3*pow(3,n-1)+1)/2);
        memset(vis,0,sizeof(vis));
        for(int i=1;i<=pow(3,n);i++)
        {
            int flag=0;
            for(int j=pow(3,n);j>=1;j--)
            {
                if(mp[i][j]=='O')
                {
                    vis[i]=j;
                    break;
                }
            }
        }
        for(int i=1;i<=pow(3,n);i++)
        {
            for(int j=1;j<=pow(3,n);j++)
            {
                if(j==vis[i])
                {
                    printf("O
"); break; } else if(mp[i][j]=='O') printf("O"); else printf(" "); } } } return 0; }

좋은 웹페이지 즐겨찾기