省赛训练之基础(一)
来源:互联网 发布:awesome note for mac 编辑:程序博客网 时间:2024/05/22 05:01
今天老师讲了几道比较基础的题目:
1、北大平台的1552 -->Doubles:
思路:找到数据中刚好为其中1倍的数字。前一个与后面的依次比对。
做法:
#include<stdio.h>int main(){ intn,a[1000],i,j,k,count,z; while(scanf("%d",&n)){ if(n==-1) break; z=1; a[0] = n;//别忘记了我们的第一个数据 while(scanf("%d",&n)!=EOF){ a[z++] = n; if(n==0) break; } count = 0; for(i=0;i<z;i++) for(j=i+1;j<z;j++){ if(a[i]*2==a[j]||a[j]*2==a[i]){ count++; } } printf("%d\n",count); }}
2、北大平台上的2739-->Sum of Consecutive Prime Numbers:
思路:1、通过打表的方式写出连续的素数。 2、连续的最大素数不超过我们输入的素数。
做法:
#include<stdio.h>
#include<string.h>
int main(){
inta,i,z,j,k,b[10005],s,count;
memset(b,0,sizeof(b));
z=0;
//先打表
for(i=2;i<10000;i++)
{
for(j=2;j<i;j++)
if(i%j==0)
break;
if(i==j)
b[z++]=i;
}
// for(i=0;i<10;i++)
// printf("%d",b[i]);
while(scanf("%d",&a)!=EOF){
if(a==0)
break;
s =0;
i=0;
j=i;
count=0;
while(1){
//开始计算
while(s<a){
s= s + b[i];
i++;
}
if(s==a){
count++;
if(b[i+1]>s)
break;
else
{
j++;
i= j;
s= 0;
}
}
else{
j++;
if(b[j]<=a)
{
i=j;
s= 0;
}
else
break;
}
}
printf("%d\n",count);
}
}
3、北大平台上的2242
思路:这题主要是要求圆的半径
方法:1、中垂线求半径 2、a/sinA = b/sinB =2R &S =1/2bcsinA
#include<stdio.h>
#include<math.h>
int main()
{
doublex1,y1,x2,y2,x3,y3,a,b,c,p,s,Sin,d;
while(scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3)!=EOF)
{
a =sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
b =sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));
c =sqrt((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1));
// printf("%lf %lf %lf\n",a,b,c);
p =(a+b+c)/2.0;
// printf("%lf",p);
s =sqrt(p*(p-a)*(p-b)*(p-c));
// printf("%lf\n",s);
d =b*c*a/(2*s);
printf("%.2lf\n",d*3.141592653589793);
}
}
4、北大平台1833
思路:字典序的求法:1、记录从右到左第一次出现非递增数字的位置【num[b]<=num[b+1]】。2、向后比,找到比这个数字更大的最小数值,调换位置。3、排序
方法:
#include<stdio.h>#include<string.h>int main(){int T,max,num[2000],i,j,k,n,m,p,q,temp,time,flag;scanf("%d",&T);while(T--){max = 0;scanf("%d%d",&n,&time);for(i=0;i<n;i++)scanf("%d",&num[i]);while(time--){flag = 1;//1、从右到左找到没有递增的数据,确定位置 pfor(i=n-2;i>=0;i--){if(num[i]<num[i+1]){//printf("%d %d\n",num[i],num[i+1]);flag = 0;p=i;break;}}if(flag==1){for(i=0;i<n;i++)num[i] = i+1;//printf("ok\n");}else{//printf("%d\n",p);//printf("%d\n",num[p]);max = num[p+1];//printf("11111111\n");k = p+1;//2、找到比这个位置上的数更大的最小数for(i=k;i<n;i++){//printf("num[i] = %d num[p] = %d max = %d",num[i],num[p],max);if(num[i]<max&&num[i]>num[p]){max = num[i];k = i;}//printf("11111111111111\n");} //3、交换temp = num[p];num[p] = num[k]; num[k] = temp;//4、排序for(i=p+1;i<n;i++){for(j=i+1;j<n;j++){if(num[j]<num[i]){temp = num[j];num[j] = num[i];num[i] = temp;}}}}} for(i=0;i<n;i++)printf("%d ",num[i]);printf("\n");}}
省赛基础~嘿嘿~
- 省赛训练之基础(一)
- 省赛训练之基础(二)
- 训练赛(一)
- 省赛训练之递归(三)
- 素数及素数筛选算法训练基础题(一)
- 训练计划(一)
- 逻辑思维训练(一)
- 算法训练(一)
- CAFFE学习笔记(一)Caffe_Example之训练mnist
- CAFFE学习笔记(一)Caffe_Example之训练mnist
- DeepLearning#之浅层与深层的训练(一)
- linux基础(一)之基础操作
- (一)struts之基础
- (一)struts2之基础
- (一)Hibernate之基础
- 省赛训练之并查集(五)
- 省赛训练之C++的模版映射(六)
- 省赛训练之并查集(六)
- Rb-tree中删除元素后树形调整函数_Rb_tree_rebalance_for_erase
- HDU 2438 三分
- Why Google better than baidu
- ios 手机号码验证
- rcp(插件开发)如何获取显示在编辑区的所有编辑器及获取其中之一
- 省赛训练之基础(一)
- C8051F330 Flash访问单元
- 是时候结束对IE6的批评了
- 面试技巧:16个经典面试问题回答思路(转)
- tomcat,mysql,性能优化
- win7 安装iis
- 省赛训练之基础(二)
- 常用资料整理
- php缓冲 output_buffering和ob_start buffer