求大佬帮忙看看错在哪了。。。
查看原帖
求大佬帮忙看看错在哪了。。。
549426
ttkuilei楼主2021/8/26 10:27

这是我在USACO training做的。

原题 要求在"dict.txt"文件中读取4617个名字。

它每次都输出NONE,不知道为什么。。。

代码不整洁请见谅!

/*
ID:tangjia14
TASK:namenum
LANG:C++
*/
#include<bits/stdc++.h>
#define LONG 4617
using namespace std;
int len(int a)
{
	int count=1;
	while(1)
	{
		if(a<10)
			return count;
		a/=10;
		count++;
	}
}
int top(int a)
{
	while(1)
	{
		if(a<10)
			return a;
		a/=10;
	}
}
int pow(int a,int b)
{
	int ans=1;
	for(int i=0;i<b;i++)
		ans*=a;
	return ans;
}
int main()
{
	ifstream fin("namenum.in");
	ifstream dict("dict.txt");
	ofstream fout("namenum.out");
	
	int n,m;
	int count=0;
	string name;
	bool can[LONG];
	fin>>n;
	m=n;
	for(int i=0;i<LONG;i++)
	{
		n=m;
		can[i]=true;
		dict>>name;
		if(len(n)==name.size())
		{
			for(int j=0;j<len(n);j++)
			{
				if(!((top(n)==2&&name[j]>='A'&&name[j]<='C')||(top(n)==3&&name[j]>='D'&&name[j]<='F')||(top(n)==4&&name[j]>='G'&&name[j]<='I')||(top(n)==5&&name[j]>='J'&&name[j]<='L')||(top(n)==6&&name[j]>='M'&&name[j]<='O')||(top(n)==7&&name[j]>='P'&&name[j]<='S'&&name[j]!='Q')||(top(n)==8&&name[j]>='T'&&name[j]<='V')||(top(n)==9&&name[j]>='W'&&name[j]<='Y')))
				{
					can[i]=false;
					break;
				}
				n-=top(n)*pow(10,len(n)-1);
			}
		}
	}
	for(int i=0;i<LONG;i++)
	{
		if(can[i])
		{
			if(count)
				fout<<" ";
			fout<<name;
			count++;
		}
	}	
	if(count==0)
		fout<<"NONE";
	fout<<endl;
	return 0;
}
2021/8/26 10:27
加载中...