Licznik trójkowy tudzież permutacje

0

Witam. Potrzebuję osiągnąć taki efekt odliczania:

00000000
00000001
00000002
00000010
00000011
00000012
//itd 

Jak widać jest to zwykły licznik +1 w zapisie trójkowym. Z braku pomysłu rozwiązałem to tak że konwertuję inta do zapisu trójkowego a potem go inkrementuję i to działa jak trzeba. Może macie pomysł jak takie efekt osiągnąć bez tej konwersji. Any ideas?

0

Moze jakos tak ? Mam problemy z kompilatorem zaraz sprawdze czy to dziala w miare

 
	char tab[] = { '0', '0', '0', '0', '0', '0', '0', '0',0 };
	
	for (int j = 0; j <= 10; j++)
	{
		for (int i = 0; i <= 2; i++)
		{
			cout << tab << endl;
			if (tab[7] == '2') tab[7] = '0';
			tab[7]++;
		}
		for (int i = 6; i >= 0; i--)
		{
			if (tab[i] == '0' || tab[i] == '1')
			{
				tab[i]++; break;
			}
			else if (tab[i] == '2') tab[i] = '0';
		}
	}
	getchar();

EDIT:
OK widze ze prawie dziala xd

1
 
#include <iostream>

using namespace std;

int main()
{
	char tab[] = { '0', '0', '0', '0', '0', '0', '0', '0',0 };
	
	for (int j = 0; j <= 10; j++)
	{
		for (int i = 0; i <= 2; i++)
		{
			cout << tab << endl;
			if (tab[7] == '2')
			{
				tab[7] = '0';
				break;
			}
			tab[7]++;
		}
		for (int i = 6; i >= 0; i--)
		{
			if (tab[i] == '0' || tab[i] == '1')
			{
				
				tab[i]++; 
				

				break;
			}
			else if (tab[i] == '2') tab[i] = '0';
		}
	}
	getchar();
}

To wygląda na już działające niewielkie poprawki :P Jeśli chcesz wypisać wszystkie zamień tą najbardziej zewnetrzną pętle for na do{
}while(tab[7]!='2' && tab[6]!='2' && tab[5]!='2' && ... && tab[0]!='2');

1
#include <iostream>
#include <cstring>
using namespace std;

int main()
  {
   char dig[]="0000";
   for(char *p=dig;p>=dig;)
     {
      cout<<dig<<endl;
      p=strchr(dig,0);
      while((--p>=dig)&&(++(*p)>='3')) *p='0';
     }
   return 0;
  }

http://ideone.com/nlOcx6

1 użytkowników online, w tym zalogowanych: 0, gości: 1