NOIP 1998 普及组 2的幂次方 解题报告
虽说是普及组,还是不好处理啊!想了好久,最后决定使用一个栈来维护所有的枚举,总的来说我这里算是用了两个栈(因为BFS本身就能算一个栈),这个题目真的有挑战性啊,算法没什么,但是规律方面的东西好重要饿。。。。
不说了,代码:
#include <stdio.h> #include <stdlib.h> int flag = 0; int stack[100000]; int top; void push(int k) { stack[top++] = k; } int pop(void) { return stack[--top]; } void output(int k) { int i, j; int t; if(k == 0){ printf("0"); return ; } for(i = j = 0; k != 0; i++, k /= 2){ if(k & 1){ push(i); j++; } } for(i = 0; i < j; i++){ if(i != 0){ printf("+"); } t = pop(); if(t == 1){ printf("2"); continue; }else{ printf("2("); output(t); printf(")"); } } } int main(int argc, char **argv) { int n; scanf("%d", &n); output(n); printf("\n"); return 0; }