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,10^6] 进行素数打表。.
- 利用等差数列公式:an=a1+(n-1)*d。
- 双层for进行分别暴力枚举a1和d。
- 最终寻得合适的a1和d
- 检验,可以输出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;
}