poj 2190 ISBN

简介:

一次A!

这种题目要得就是思路清晰,细心,考虑周全。。。

然后。。然后就没了。。。


注意字符串和int型数据的转来转去。。。


AC的代码:

#include <stdio.h>

char ISBN[12];

void find(int sum,int pos)
{
	//找出那个数字是什么
	int i;
	
	if(pos!=9 && pos!=-1)
	{
		//如果不是最后一位看不清
		for(i=0;i<=9;i++)
		{
			if( (sum+i*(10-pos))%11==0 )
			{
				printf("%d\n",i);
				return;
			}
		}
	}

	else if(pos==9  && pos!=-1)
	{
		for(i=0;i<=10;i++)
		{
			if((sum+i*(10-pos))%11==0 && i==10)
			{
				printf("X\n");
				return;
			}

			if( (sum+i*(10-pos))%11==0)	
			{
				printf("%d\n",i);
				return;
			}
		}
	}

	printf("-1\n");
}

void work()
{
	int pos=-1;//存放问号位置
	
	int i;
	int sum=0;//算除了问号位的总和
	int num;//每一位数的整型形式
	for(i=0;i<10;i++)
	{
		if(ISBN[i]=='?')
		{
			pos=i;
			continue;
		}
		
		if(ISBN[i]=='X')
			num=10;
		
		else
			num=ISBN[i]-48;
		
		sum+=(10-i)*num;
	}
	
	//printf("%d\n",sum);
	find(sum,pos);
}

int main()
{
	//输入
	scanf("%s",ISBN);
	
	work();
	
	return 0;
}




相关文章
|
6月前
|
存储
poj 3254 Corn Fields (状态压缩dp)
状态压缩dp其实就是用二进制来表示所有的状态,比如这题, 我们在某一行可以这样取0 1 0 1 1 0 1,用1代表取了,0代表没取,因为这点,它的数据量也限制在20以内,所有看到这样数据量的题目可以先考虑一下状态压缩dp。对于有多行的数据,所有状态的总数必然很庞大,而且不用特殊的方法想要存储这些状态是不太现实的。既然每个点只有这两种情况,我们可以用二进制的一位来表示,0 1 0 1 1 0 1就可以表示为二进制0101101也就是十进制的45,如果我们想要枚举6个点的所有状态,我们只需要从0到2^6取其二进制就可以了,并不会重复或是多余。
17 0
|
7月前
|
C++
洛谷P1055 ISBN号码(C++解法)
洛谷P1055 ISBN号码(C++解法)
|
8月前
|
网络架构
POJ 3250 Bad Hair Day、POJ 2796 Feel Good(单调栈)
POJ 3250 Bad Hair Day、POJ 2796 Feel Good(单调栈)
洛谷P2722-[USACO3.1]总分 Score Inflation(完全背包)
洛谷P2722-[USACO3.1]总分 Score Inflation(完全背包)
洛谷P2722-[USACO3.1]总分 Score Inflation(完全背包)
|
知识图谱
POJ-1384,Piggy-Bank(完全背包)
POJ-1384,Piggy-Bank(完全背包)
HDU-1009,FatMouse' Trade(贪心水题)
HDU-1009,FatMouse' Trade(贪心水题)
HDOJ(HDU) 1718 Rank(水题、、、)
HDOJ(HDU) 1718 Rank(水题、、、)
57 0