ハノイの塔　64段

#include <stdio.h>
#include <stdlib.h>

//詰まるところbar[バーの高さ][バーの位置]
int barbel[65][4] = { { 0,0,0,0 },{ 1,0,0,0 },{ 2,0,0,0 } ,{ 3,0,0,0 } ,{ 4,0,0,0 },{ 5,0,0,0 },
{6,0,0,0},{7,0,0,0},{8,0,0,0},{9,0,0,0},{10,0,0,0},{11,0,0,0},{12,0,0,0},{13,0,0,0},
{14,0,0,0},{15,0,0,0},{16,0,0,0},{17,0,0,0},{18,0,0,0},{19,0,0,0},{20,0,0,0},{21,0,0,0},{22,0,0,0},
{23,0,0,0},{24,0,0,0},{25,0,0,0},{26,0,0,0},{27,0,0,0},{28,0,0,0},{29,0,0,0},{30,0,0,0},{31,0,0,0},
{32,0,0,0},{33,0,0,0},{34,0,0,0},{35,0,0,0},{36,0,0,0},{37,0,0,0},{38,0,0,0},{39,0,0,0},{40,0,0,0},
{41,0,0,0},{42,0,0,0},{43,0,0,0},{44,0,0,0},{45,0,0,0},{46,0,0,0},{47,0,0,0},{48,0,0,0},{49,0,0,0},
{50,0,0,0},{51,0,0,0},{52,0,0,0},{53,0,0,0},{54,0,0,0},{55,0,0,0},{56,0,0,0},{57,0,0,0},{58,0,0,0},
{59,0,0,0},{60,0,0,0},{61,0,0,0},{62,0,0,0},{63,0,0,0},{64,0,0,0} };/*こう書くとゼロクリアされる*/
																								 //やはり高さはいる
int bartakasa[3] = { 0,64,64 };

char barbel0[] = { "                             " };
char barbel1[] = { "                    #           " };
char barbel2[] = { "                   ###          " };
char barbel3[] = { "                  #####         " };
char barbel4[] = { "                 #######        " };
char barbel5[] = { "                #########       " };
char barbel6[] = { "               ###########      " };
char barbel7[] = { "              #############     " };
char barbel8[] = { "             ###############    " };
char barbel9[] = { "            #################   " };
char barbel10[] = { "          ###################  " };
char barbel11[] = { "         #####################  " };
char barbel12[] = { "        #######################  " };
char barbel13[] = { "          #########################" };
char barbel14[] = { "            ###########################" };
char barbel15[] = { "             #############################" };
char barbel16[] = { "               ###############################" };
char barbel17[] = { "                 #################################" };
char barbel18[] = { "                   ###################################" };
char barbel19[] = { "                     #####################################" };
char barbel20[] = { "                       #######################################" };
char barbel21[] = { "                         #########################################" };
char barbel22[] = { "                           ###########################################" };
char barbel23[] = { "                             #############################################" };
char barbel24[] = { "                               ###############################################" };
char barbel25[] = { "                                 #################################################" };
char barbel26[] = { "                                   ###################################################" };
char barbel27[] = { "                                     #####################################################" };
char barbel28[] = { "                                       #######################################################" };
char barbel29[] = { "                                       #########################################################" };
char barbel30[] = { "                                         ###########################################################" };
char barbel31[] = { "                                           #############################################################" };
char barbel32[] = { "                                             ###############################################################" };
char barbel33[] = { "                                             #################################################################" };
char barbel34[] = { "                                             ###################################################################" };
char barbel35[] = { "                                               #####################################################################" };
char barbel36[] = { "                                              #######################################################################" };
char barbel37[] = { "                                                #########################################################################" };
char barbel38[] = { "                                                  ###########################################################################" };
char barbel39[] = { "                                                  #############################################################################" };
char barbel40[] = { "                                                  ###############################################################################" };
char barbel41[] = { "                                                    #################################################################################" };
char barbel42[] = { "                                                    ###################################################################################" };
char barbel43[] = { "                                                    #####################################################################################" };
char barbel44[] = { "                                                      #######################################################################################" };
char barbel45[] = { "                                                        #########################################################################################" };
char barbel46[] = { "                                                          ###########################################################################################" };
char barbel47[] = { "                                                            #############################################################################################" };
char barbel48[] = { "                                                            ###############################################################################################" };
char barbel49[] = { "                                                             #################################################################################################" };
char barbel50[] = { "                                                               ###################################################################################################" };
char barbel51[] = { "                                                                #####################################################################################################" };
char barbel52[] = { "                                                                #######################################################################################################" };
char barbel53[] = { "                                                                #########################################################################################################" };
char barbel54[] = { "                                                               ###########################################################################################################" };
char barbel55[] = { "                                                               #############################################################################################################" };
char barbel56[] = { "                                                              ###############################################################################################################" };
char barbel57[] = { "                                                                #################################################################################################################" };
char barbel58[] = { "                                                                 ###################################################################################################################" };
char barbel59[] = { "                                                                 #####################################################################################################################" };
char barbel60[] = { "                                                                 #######################################################################################################################" };
char barbel61[] = { "                                                                 #########################################################################################################################" };
char barbel62[] = { "                                                                  ###########################################################################################################################" };
char barbel63[] = { "                                                                  #############################################################################################################################" };
char barbel64[] = { "                                                                 ###############################################################################################################################" };

void move(int, int);
void syokika(void);
int takasacheck(int, int, int);
int main(void)
{
	int i;
	syokika();
	for (i = 1; i <=18446744073709551615 ; i++) {
		printf("%d回目\n", i);
		move((i&(i - 1)) % 3, ((i | (i - 1)) + 1) % 3);
		syokika();
	}

	system("Pause");
	return 0;
}
void move(int idoumoto, int idousaki)
{
	int idoumototakasa = 0;
	int idousakitakasa = 0;
	idoumototakasa = bartakasa[idoumoto];
	idousakitakasa = bartakasa[idousaki];
	idoumototakasa = takasacheck(idoumototakasa, idoumoto, idousaki);

	barbel[idousakitakasa][idousaki] = barbel[idoumototakasa][idoumoto];
	barbel[idoumototakasa][idoumoto] = 0;

	bartakasa[idousaki] = bartakasa[idousaki] - 1;
	bartakasa[idoumoto] = bartakasa[idoumoto] + 1;


}
void syokika(void) {
	int i;
	int j;

	for (i = 0; i < 65; i++) {
		for (j = 0; j < 4; j++) {
			switch (barbel[i][j]) {
				//文字列なので’が必要
			case 0:
				printf("%s", barbel0);
				break;
			case 1:
				printf("%s", barbel1);
				break;
			case 2:
				printf("%s", barbel2);
				break;
			case 3:
				printf("%s", barbel3);
				break;
			case 4:
				printf("%s", barbel4);
				break;
			case 5:
				printf("%s", barbel5);
				break;
			case 6:
				printf("%s", barbel6);
				break;
			case 7:
				printf("%s", barbel7);
				break;
			case 8:
				printf("%s", barbel8);
				break;
			case 9:
				printf("%s", barbel9);
				break;
			case 10:
				printf("%s", barbel10);
				break;
			case 11:
				printf("%s", barbel11);
				break;
			case 12:
				printf("%s", barbel12);
				break;
			case 13:
				printf("%s", barbel13);
				break;
			case 14:
				printf("%s", barbel14);
				break;
			case 15:
				printf("%s", barbel15);
				break;
			case 16:
				printf("%s", barbel16);
				break;
			case 17:
				printf("%s", barbel17);
				break;
			case 18:
				printf("%s", barbel18);
				break;
			case 19:
				printf("%s", barbel19);
				break;
			case 20:
				printf("%s", barbel20);
				break;
			case 21:
				printf("%s", barbel21);
				break;
			case 22:
				printf("%s", barbel22);
				break;
			case 23:
				printf("%s", barbel23);
				break;
			case 24:
				printf("%s", barbel24);
				break;
			case 25:
				printf("%s", barbel25);
				break;
			case 26:
				printf("%s", barbel26);
				break;
			case 27:
				printf("%s", barbel27);
				break;
			case 28:
				printf("%s", barbel28);
				break;
			case 29:
				printf("%s", barbel29);
				break;
			case 30:
				printf("%s", barbel30);
				break;
			case 31:
				printf("%s", barbel31);
				break;
			case 32:
				printf("%s", barbel32);
				break;
			case 33:
				printf("%s", barbel33);
				break;
			case 34:
				printf("%s", barbel34);
				break;
			case 35:
				printf("%s", barbel35);
				break;
			case 36:
				printf("%s", barbel36);
				break;
			case 37:
				printf("%s", barbel37);
				break;
			case 38:
				printf("%s", barbel38);
				break;
			case 39:
				printf("%s", barbel39);
				break;
			case 40:
				printf("%s", barbel40);
				break;
			case 41:
				printf("%s", barbel41);
				break;
			case 42:
				printf("%s", barbel42);
				break;
			case 43:
				printf("%s", barbel43);
				break;
			case 44:
				printf("%s", barbel44);
				break;
			case 45:
				printf("%s", barbel45);
				break;
			case 46:
				printf("%s", barbel46);
				break;
			case 47:
				printf("%s", barbel47);
				break;
			case 48:
				printf("%s", barbel48);
				break;
			case 49:
				printf("%s", barbel49);
				break;
			case 50:
				printf("%s", barbel50);
				break;
			case 51:
				printf("%s", barbel51);
				break;
			case 52:
				printf("%s", barbel52);
				break;
			case 53:
				printf("%s", barbel53);
				break;
			case 54:
				printf("%s", barbel54);
				break;
			case 55:
				printf("%s", barbel55);
				break;
			case 56:
				printf("%s", barbel56);
				break;
			case 57:
				printf("%s", barbel57);
				break;
			case 58:
				printf("%s", barbel58);
				break;
			case 59:
				printf("%s", barbel59);
				break;
			case 60:
				printf("%s", barbel60);
				break;
			case 61:
				printf("%s", barbel61);
				break;
			case 62:
				printf("%s", barbel62);
				break;
			case 63:
				printf("%s", barbel63);
				break;
			case 64:
				printf("%s", barbel64);
				break;

			}
		}printf("\n");
	}printf("-------------------------------------------------------\n");
}
int takasacheck(int idoumototakasa, int idoumoto, int idousaki) {

	if (barbel[idoumototakasa][idoumoto] == 0)
	{
		idoumototakasa = idoumototakasa + 1;
		idoumototakasa = takasacheck(idoumototakasa, idoumoto, idousaki);
	}
	return idoumototakasa;
}