问题int arr[] = {0,0,0,0,0,0,0,0,0}; 改变这个数组的值,每一位有0,1,2三种状态,显示出所有状态。
思路一:
以三进制来考虑,输出0-222222222之间的所有3进制数据。
//下面这段代码在VS2008上运行结果是正确的,在CFREE上好像不太对,可能是pow函数的问题,也可能没问题了,具体没测
#include <stdio.h>
#include <math.h>
#define WE_MAX_TEMARY 222222222
//十进转3进制
int Dec2Temary(int nDec)
{
int nTem = 0;
for(int i=0; nDec!=0; i++)
{
nTem += ( nDec%3 * pow(10.f,i) );
nDec /= 3;
}
return nTem;
}
//3进转十进
int Tem2Dec(int nTem)
{
int nDec = 0;
for(int i=0; nTem!=0; i++)
{
nDec += ( (nTem%10)*pow(3.f,i) );
nTem /= 10;
}
return nDec;
}
int main()
{
//int arr[] = {0,0,0,0,0,0,0,0,0};
freopen("out.txt", "w", stdout);
int nMaxDec = Tem2Dec(WE_MAX_TEMARY);
for(int i=0; i<=nMaxDec; i++)
{
printf("%09d\n", Dec2Temary(i));
}
// int nTest = Tem2Dec(2011);
// printf("%d\n", nTest);
// nTest = Dec2Temary(197);
// printf("%d\n", nTest);
return 0;
}
方法二:
简单粗暴型,9个for循环,里面还有个for用来输出,时间复杂度O(n^10),不过好在循环以3次为主…… 还可以接受
int main()
{
#ifdef FUNCTION_1
freopen("out.txt", "w", stdout);
int nMaxDec = Tem2Dec(WE_MAX_TEMARY);
for(int i=0; i<=nMaxDec; i++)
{
printf("%09d\n", Dec2Temary(i));
}
#endif
freopen("out2.txt", "w", stdout);
int arr[] = {0,0,0,0,0,0,0,0,0};
//char szAns[MAX_BUF_LEN]="";
for(int nIndex0=0; nIndex0<3; nIndex0++)
for(int nIndex1=0; nIndex1<3; nIndex1++)
for(int nIndex2=0; nIndex2<3; nIndex2++)
for(int nIndex3=0; nIndex3<3; nIndex3++)
for(int nIndex4=0; nIndex4<3; nIndex4++)
for(int nIndex5=0; nIndex5<3; nIndex5++)
for(int nIndex6=0; nIndex6<3; nIndex6++)
for(int nIndex7=0; nIndex7<3; nIndex7++)
for(int nIndex8=0; nIndex8<3; nIndex8++)
{
arr[0]=nIndex0;
arr[1]=nIndex1;
arr[2]=nIndex2;
arr[3]=nIndex3;
arr[4]=nIndex4;
arr[5]=nIndex5;
arr[6]=nIndex6;
arr[7]=nIndex7;
arr[8]=nIndex8;
int nArrLen = sizeof(arr)/sizeof(int);
for(int i=0; i<nArrLen; i++)
{
printf("%d", arr[i]);
}
puts("");
}
return 0;
}
To Be Continued...