(USACO 2.2.1) Preface Numbering

按位觀察即可

#include <iostream>
#include <fstream>
#include <string>
//#define LOCAL

using namespace std;

#ifdef LOCAL
ofstream fout ("out.txt");
ifstream fin ("in.txt");
#else
ofstream fout ("preface.out");
ifstream fin ("preface.in");
#endif

char c[] = {'I', 'V', 'X', 'L', 'C', 'D', 'M'};
int num[7];

int main() {
	int n;
	fin>>n;
	for(int i = 1; i <= n; i++)
	{
		int base = 0;
		int temp = i;
		while(temp>0)
		{
			switch(temp%10)
			{
				case 1: num[base]++;break;
				case 2: num[base]+=2;break;
				case 3: num[base]+=3;break;
				case 4: num[base]++; num[base+1]++; break;
				case 5: num[base+1]++;break;
				case 6: num[base+1]++;num[base]++;break;
				case 7: num[base+1]++;num[base]+=2;break;
				case 8: num[base+1]++;num[base]+=3;break;
				case 9: num[base]++;num[base+2]++;break;
			}
			base+=2;
			temp/=10;
		}
	}
	for (int i = 0; i < 7; ++i)
	{
		if(num[i]!=0)
			fout<<c[i]<<' '<<num[i]<<endl;
	}
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章