NOIP2017 普及组T2题解

NOIP2017 普及组T2

要想解题,我们先来了解一个核心思想:

若一个图书编码以需求码结尾,那该码减去需求码后必对10的需求码长度次方 取余 得零


因为要输出图书编码最小的书,所以用sort函数直接进行排序~~(其实是懒)~~

并使用打表来表示每次的取余数~~(NOIP最常用算法)~~

if(len==1){
	t=10;
}

if(len==2){
	t=100;
}

if(len==3){
	t=1000;
}

if(len==4){
	t=10000;
}

if(len==5){
	t=100000;
}

if(len==6){
	t=1000000;
}

if(len==7){
	t=10000000;
}


我们使用for循环遍历来找出符合的图书编码,有就立即输出,然后‘break’,如果遍历一遍一个也没有,就输出‘-1


接下来见完整代码:

#include 
#include 
#include 
#include 
using namespace std;

int n,p;
int a[1005];
int len,b;
int t;
int main()
{   
	scanf("%d %d",&n,&p);

	for (int i = 0; i < n; ++i)
	{
		scanf("%d",&a[i]);
	}

	sort(a, a+n-1);

	for (int i = 1; i <= p; ++i)
	{
		scanf("%d %d",&len, &b);

		if(len==1){
			t=10;
		}

		if(len==2){
			t=100;
		}

		if(len==3){
			t=1000;
		}

		if(len==4){
			t=10000;
		}

		if(len==5){
			t=100000;
		}

		if(len==6){
			t=1000000;
		}

		if(len==7){
			t=10000000;
		}

		for (int j = 0; j < n; ++j)
		{
			if(a[j]==b){
				printf("%d\n",a[j] );
				break;
			}
			if(a[j]>b&&(a[j]-b)%t==0){
				printf("%d\n",a[j]);
				break;
			}
			if(j==n-1){
				printf("-1\n");
			}
		}
		
	}

	return 0;
}

感谢大家

你可能感兴趣的:(NOIP2017 普及组T2题解)