⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 acmfactorx.cpp

📁 2004ACM竞赛上海国内赛题部分答案
💻 CPP
字号:
#include<iostream>
using namespace std;
int fac;
int L[10]={1,1,2,6,18,54,162,486,1458,4374};
int LL[10]={2,4,10,28,82,244,730,2188,2188,2188};
int LT[10]={0,1,3,9,27,81,243,729,2187,6561};
int setL(int y){
//	if(y==2) return 1;
	int i=fac;
	while(y>1) {//1
		if((y%L[i])>(2*L[i-1])) return 0;
		else y%=L[i--];
	}
	return y;
}
int TS(int x){
	int k=fac;
	while(x<L[k--]);
	return x-
		L[k];
}
int setLL(int y){
	int i=fac;
	while(y<=LT[i]) i--;
	return i;
}
int equalll(int a,int b){
	if(a==b) return 1;
	int k=0;
	while(k<=fac)
		if((a+b==LL[k++])) return 1;
	return 0;
}

void print(int n){
	int top=1;
	while(--n) top*=3;
	top++;
	int i,j,iL,jL,c;
	for(i=1;i<top;i++){//by row
		iL=setL(i);
		for(j=1;j<top;j++){//by col
			jL=setL(j);
			if(equalll(i,j)) {cout<<'T';continue;}
			if((iL&&jL)) {cout<<'X';continue;}
			c=setLL(i)>setLL(j)?setLL(i):setLL(j);//cout<<c<<' '<<LT[c]<<' ';
			if(LT[c]<i&&LT[c]<j&&i<=2*LT[c+1]&&j<=2*LT[c+1])
				if(setL(i-LT[c])&&setL(j-LT[c])) {cout<<'E';continue;}
			cout<<' ';
		}
		cout<<endl;
	}
	cout<<'-'<<endl;
}
int main(){
	while(1){
		cout<<"Please input factor(<7) :"<<endl;
		cin>>fac;if(fac==0) return 0;
		print(fac);
	}
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -