2017蓝桥杯B组真题

1. 购物单

答案:5200

思路:

改下数据,多组输入,最后ctrl+z结束。

180.90 88
10.25 65
56.14 90
104.65 90
100.30 88
297.15 50
26.75 65
130.62 50
240.28 58
270.62 80
115.87 88
247.34 95
73.21 90
101.00 50
79.54 50
278.44 70
199.26 50
12.97 90
166.30 78
125.50 58
84.98 90
113.35 68
166.57 50
42.56 90
81.90 95 
131.78 80
255.89 78
109.17 90
146.69 68
139.33 65
141.16 78
154.74 80
59.42 80
85.44 68
293.70 88
261.79 65
11.30 88
268.27 58
128.29 88
251.03 80
208.39 75
128.88 75
62.06 90
225.87 75
12.89 75
34.28 75
62.16 58
129.12 50
218.37 50
289.69 80

代码:

#include<stdio.h>
int main()
{
	double sum=0.0;
	double a,b;
	while(~scanf("%lf %lf",&a,&b))
	{
		sum+=(1.0*a*b/100);
	}
	printf("%lf\n",sum);
	return 0;
}

2. 等差素数列

答案:210

解题流程:

  1. 利用埃氏筛法对区间[1,10^6] 进行素数打表。.
  2. 利用等差数列公式:an=a1+(n-1)*d。
  3. 双层for进行分别暴力枚举a1和d。
  4. 最终寻得合适的a1和d
  5. 检验,可以输出a1,d,10个素数的值。

代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int N=1e6+10;
int book[N],prime[N];
int tot=0;
void init()
{
	int i,j;
	memset(book,0,sizeof(book));
	book[0]=1,book[1]=1; 
	for(i=2;i<=N;i++)
	{
		if(book[i]==0)
		{
			prime[tot++]=i;
			for(j=i*2;j<=N;j+=i)
				book[j]=1;
		}
	}
}
int main()
{
	init();
	int i,j,k,d,n,a1,an,flag=0;
	for(i=0;i<tot;i++)
	{
		a1=prime[i];
		for(d=1;d<=300;d++)
		{
			for(n=1;n<=10;n++)
			{
				an=a1+(n-1)*d;
				if(book[an]!=0)//不是素数 
					break;
			}
			if(n==11)
				printf("%d\n",d);		
		}
	}
	return 0;
}
上一篇:Python描述 LeetCode 88. 合并两个有序数组


下一篇:leetcode 88. 合并两个有序数组