C算法提高训练题

合集下载

蓝桥杯试题算法提高gpac语言

蓝桥杯试题算法提高gpac语言

蓝桥杯ADV-284 算法提高GPA算法提高GPA时间限制:1.0s 内存限制:256.0MB问题描述输入A,B两人的学分获取情况,输出两人GPA之差。

输入格式输入的第一行包含一个整数n表示A的课程数,以下n行每行Si,Ci分别表示第i个课程的学分与A的表现。

GPA=Σ(Si*Ci) / Σ(Si)。

特殊地,如果Ci是'P'或者'N'(对应于通过与不通过),则第i个课程不记入GPA的计算(即当其不存在)。

A读入结束后读入B,B的输入格式与A相同。

保证2人的Σ(Si)非零输出格式输出A的GPA - B的GPA的值,保留2位小数(四舍五入)Tips:当A和B的分数相近时输出0.00。

样例输入21 102 N21 101 5样例输出2.50数据规模和约定输入的所有数字均为不超过100的非负整数#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>int main(){int n, Si, Ci;char str_Ci[5] = { 0 };double numerator, denominator, gpa_a, gpa_b;numerator = denominator = 0;scanf("%d", &n);while (n--){scanf("%d %s", &Si, str_Ci);if (strcmp(str_Ci, "P") == 0 || strcmp(str_Ci, "N") == 0) continue;else{Ci = atoi(str_Ci);numerator += Si * Ci;denominator += Si;}}gpa_a = numerator / denominator;numerator = denominator = 0;scanf("%d", &n);while (n--){scanf("%d %s", &Si, str_Ci);if (strcmp(str_Ci, "P") == 0 || strcmp(str_Ci, "N") == 0) continue;else{Ci = atoi(str_Ci);numerator += Si * Ci;denominator += Si;}}gpa_b = numerator / denominator;double diff = gpa_a - gpa_b;if (fabs(diff) < 0.01)printf("0.00");elseprintf("%.2lf", diff);return 0;}。

c4.5算法例题

c4.5算法例题

c4.5算法例题C4.5算法是一种经典的决策树算法,它被广泛应用于数据挖掘和机器学习领域。

本文将以一个实际的例题为基础,详细介绍C4.5算法的原理、步骤和应用过程,并通过举例说明来加深理解。

在介绍完整个算法流程后,将给出一个总结,强调算法的优势和适用性。

一、C4.5算法概述C4.5算法是一种基于信息增益的决策树算法,它的目标是通过构建一棵决策树来实现对数据的分类。

C4.5算法的核心思想是从给定的训练样本集中,通过计算每个属性的信息增益,选择最佳的属性作为当前节点的划分属性,然后再递归地对子节点进行相同的划分步骤,直到满足停止条件为止。

二、C4.5算法步骤1. 数据准备在使用C4.5算法之前,需要准备一个训练样本集合,包括特征和对应的分类标签。

确保样本集中的特征属性是离散型的,并且已预处理成二进制数值。

2. 属性选择对于当前节点,计算每个特征属性的信息增益,选择信息增益最大的属性作为划分属性。

信息增益指的是使用该属性对样本进行划分所获得的信息增加量,信息增加量越大,则该属性的区分能力越强。

3. 决策树构建根据选定的划分属性,将样本集合划分为不同的子集。

如果某个子集中的样本都属于同一类别,则将该节点标记为叶子节点,并给出对应的分类标签;否则,递归地对子集进行步骤2和步骤3,直到满足停止条件。

4. 剪枝处理为了避免决策树过拟合的问题,可以采用剪枝处理。

剪枝指的是将一些节点标记为叶子节点,简化决策树的结构以提高泛化性能。

5. 对新样本进行分类完成决策树的构建后,可以使用该决策树对新样本进行分类预测。

从根节点开始,根据样本的特征属性值不断选择子节点,最终到达叶子节点,根据叶子节点的分类标签进行分类预测。

三、举例说明为了更好地理解C4.5算法的应用过程,举一个具体的例子。

假设我们要根据一个人的性别、年龄、收入来预测该人是否购买某件商品。

现有以下训练样本集合:| 性别 | 年龄 | 收入 | 购买 ||------|------|------|------||男 | 青年 | 高 | 是 ||男 | 青年 | 低 | 否 ||男 | 青年 | 低 | 否 ||男 | 中年 | 低 | 是 ||男 | 中年 | 高 | 是 ||女 | 中年 | 高 | 是 ||女 | 中年 | 低 | 否 ||女 | 老年 | 低 | 是 ||女 | 老年 | 高 | 是 ||女 | 老年 | 高 | 是 |首先,我们计算每个属性的信息增益,根据ID3算法的原则,选择信息增益最大的属性作为划分属性。

C语言经典算法题目及答案

C语言经典算法题目及答案

C语言经典算法题目及答案题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。

组成所有的排列后再去掉不满足条件的排列。

2.程序源代码:main(){int i,j,k;printf("\n");for(i=1;i<5;i++) /*以下为三重循环*/for(j=1;j<5;j++)for (k=1;k<5;k++){if (i!=k&&i!=j&&j!=k)printf("%d,%d,%d\n",i,j,k);}}====================================== ========================【程序2】题目:企业发放的奖金根据利润提成。

利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?1.程序分析:请利用数轴来分界,定位。

注意定义时需把奖金定义成长整型。

2.程序源代码:main(){long int i;int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;scanf("%ld",&i);bonus1=100000*0.1;bonus2=bonus1+100000*0.75;bonus4=bonus2+200000*0.5;bonus6=bonus4+200000*0.3;bonus10=bonus6+400000*0.15;if(i<=100000)bonus=i*0.1;else if(i<=200000)bonus=bonus1+(i-100000)*0.075;else if(i<=400000)bonus=bonus2+(i-200000)*0.05;else if(i<=600000)bonus=bonus4+(i-400000)*0.03;else if(i<=1000000)bonus=bonus6+(i-600000)*0.015;elsebonus=bonus10+(i-1000000)*0.01;printf("bonus=%d",bonus);}====================================== ========================【程序3】题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。

2016蓝桥杯C语言算法题

2016蓝桥杯C语言算法题
输入格式:输入为一个字符串,每个字符都是’0’或’1’,字符串的长度不超过32。
输出格式:输出一个整数。
输入输出样例
样例输入
1101
样例输出
13
*/
#include <stdio.h>
#include <math.h>
#include <string.h>
#define MaxSize 32
void print2Return10(char str[])
}
main()
{
int n;
scanf("%d",&n);
getResult(n);
printf("\n");
return 0;
}
/*
算法训练 薪水计算
问题描述
编写一个程序,计算员工的周薪。薪水的计算是以小时为单位,如果在一周的时间内,员工工作的时间不超过40 个小时,那么他/她的总收入等于工作时间乘以每小时的薪水。如果员工工作的时间在40 到50 个小时之间,那么对于前40 个小时,仍按常规方法计算;而对于剩余的超额部分,每小时的薪水按1.5 倍计算。如果员工工作的时间超过了50 个小时,那么对于前40 个小时,仍按常规方法计算;对于40~50 个小时之间的部分,每小时的薪水按1.5 倍计算;而对于超出50 个小时的部分,每小时的薪水按2 倍计算。请编写一个程序,输入员工的工作时间和每小时的薪水,然后计算并显示他/她应该得到的周薪。
gets(str);
print2Return10(str);
return 0;
}
/*
算法训练 数位分离
问题描述
编写一个程序,输入一个1000 以内的正整数,然后把这个整数的每一位数字都分离出来,并逐一地显示。

c++经典例题30道

c++经典例题30道

1.绘制余弦曲线在屏幕上用“*”显示0~360度的余弦函数cos(x)曲线*问题分析与算法设计如果在程序中使用数组,这个问题十分简单。

但若规定不能使用数组,问题就变得不容易了。

关键在于余弦曲线在0~360度的区间内,一行中要显示两个点,而对一般的显示器来说,只能按行输出,即:输出第一行信息后,只能向下一行输出,不能再返回到上一行。

为了获得本文要求的图形就必须在一行中一次输出两个“*”。

为了同时得到余弦函数cos(x)图形在一行上的两个点,考虑利用cos(x)的左右对称性。

将屏幕的行方向定义为x,列方向定义为y,则0~180度的图形与180~360度的图形是左右对称的,若定义图形的总宽度为62列,计算出x行0~180度时y点的坐标m,那么在同一行与之对称的180~360度的y点的坐标就应为62-m。

程序中利用反余弦函数acos计算坐标(x,y)的对应关系。

使用这种方法编出的程序短小精炼,体现了一定的技巧。

*程序说明与注释#include<stdio.h>#include<math.h>int main(){double y;int x,m;for(y=1;y>=-1;y-=0.1) /*y为列方向,值从1到-1,步长为0.1*/{m=acos(y)*10; /*计算出y对应的弧度m,乘以10为图形放大倍数*/for(x=1;x<m;x++) printf(" ");printf("*"); /*控制打印左侧的* 号*/for(;x<62-m;x++)printf(" ");printf("*\n"); /*控制打印同一行中对称的右侧*号*/}return 0;}*思考题如何实现用“*”显示0~360度的sin(x)曲线。

在屏幕上显示0~360度的cos(x)曲线与直线f(x)=45*(y-1)+31的迭加图形。

C语言·计算时间

C语言·计算时间
释:水题却也学到了新技能——不够位补0的情况:比如本题:printf("%02d:%02d:%02d\n",hour,min,second);
1 #include<stdio.h> 2 int main(){ 3 int n; 4 scanf("%d",&n); 5 while(n--){ 6 long long t; 7 scanf("%lld",&t); 8 int hour,min,second; 9 hour = t/3600; 10 min = (t-hour*3600)/60; 11 second = t-hour*3600-min*60; 12 printf("%02d:%02d:%02d\n",hour,min,second); 13 } 14 return 0; 15 }
登录后才能查看或发表评论立即登录或者逛逛博客园首页
C语 言 ·计 算 时 间
算法提高 计算时间 时间限制:1.0s 内存限制:512.0MB
提交此题
问题描述 给定一个t,将t秒转化为HH:MM:SS的形式,表示HH小时MM分钟SS秒。HH,MM,SS均是两位数,如果小于10用0补到两位。 输入格式 第一行一个数T(1<=T<=100,000),表示数据组数。后面每组数据读入一个数t,0<=t<24*60*60。 输出格式 每组数据一行,HH:MM:SS。 样例输入 2 0 86399 样例输出 00:00:00 23:59:59

C语言1250-1274蓝桥杯ACM训练代码非官方

C语言1250-1274蓝桥杯ACM训练代码非官方

#include <stdio.h>//1250: 素数回文//小王对既是素数又是回文的数特别感兴趣。

比如说151既是素数又是个回文。

现在小王想要你帮助他找出某个范围内的素数回文数,请你写个程序找出a 跟b 之间满足条件的数。

(5 <= a < b <= 100,000,000);int hw(int i){int rt=0;int tmpi=i,hw=0;while(tmpi) {hw=hw*10+tmpi%10;tmpi/=10;}if(hw==i)rt=1;return rt;}int ss(int i){int rt=1;int j;if(i<2)rt=0;for(j=2; j<=i/2; j++) {if(i%j==0) {rt=0;break;}}/*if(rt)printf("%d\n",i);*/return rt;}void sshw(){int a,b;scanf("%d%d",&a,&b);int i;for(i=a; i<=b; i++) {if(hw(i)&&ss(i))printf("%d\n",i);}}//1251: 统计字母个数//给定一段文章,请输出每个字母出现的次数void tjzmgs(){int arr[26]= {0},i;char ch;while(scanf("%c",&ch),ch!='#') {arr[ch-97]++;}for(i=0; i<26; i++) {printf("%c %d\n",i+97,arr[i]);}}//1252: 统计立方数//有一堆正整数,统计其中有多少立方数。

#include <math.h>void tjlfs(){int n,i,lfs=0;while(scanf("%d",&n),n) {for(i=1; i<=sqrt(n); i++) {if(pow(i,3)==n) {lfs++;break;}}}printf("%d\n",lfs);}//1253: 老王赛马#include <stdlib.h>int mycmp(const void *a,const void *b){return *(int*)a-*(int*)b;}void lwsm(){int n,i,j;while(scanf("%d",&n),n) {int lw[n],ds[n],flag=1;for(i=0; i<n; i++)scanf("%d",&lw[i]);for(i=0; i<n; i++)scanf("%d",&ds[i]);qsort(lw,n,sizeof(int),mycmp);qsort(ds,n,sizeof(int),mycmp);for(i=n-1,j=n/2; i>=n/2,j>=0; i--,j--) {if(lw[i]<=ds[j]) {flag=0;break;}}if(flag)printf("YES\n");elseprintf("NO\n");}}//1254: 考试排名#include<string.h>#include<stdlib.h>typedef struct Stu {char name[11]; // 名字int score; // 得分int ptime; // 耗时} Stu;int cmp(const void *a, const void *b){Stu *c = (Stu *)a;Stu *d = (Stu *)b;if (c->score != d->score) return d->score - c->score; // 若得分不同时,按得分降序if (c->ptime != d->ptime) return c->ptime - d->ptime; // 否则,若耗时不同,按罚时升序return strcmp(c->name, d->name); // 否则,按名字字典序}void Judge(Stu *stu, char *tmp, int m){if (tmp[0] == '-' || tmp[0] == '0') return; // WA或提交0,不计// ACstu->score++; // 得分++stu->ptime += atoi(tmp); // 先计耗时if (strlen(tmp) >= 4) { // 由题意,AC耗时小于1000,len >=4 为x(x)的情况int i = 0;while (tmp[++i] != '('); // 找到左括号位置istu->ptime += atoi(tmp + i + 1) * m; // 计罚时}}void kspm(){Stu stus[1000];int i, n, m, total = 0;char tmp[10];scanf("%d%d", &n, &m);getchar();while (scanf("%s", stus[total].name) != EOF) {stus[total].score = 0;stus[total].ptime = 0;for (i = 0; i < n; i++) {scanf("%s", tmp);Judge(&stus[total], tmp, m);}getchar();total++;}qsort(stus, total, sizeof(stus[0]), cmp);for (i = 0; i < total; i++) {printf("%-10s %2d %4d\n", stus[i].name, stus[i].score, stus[i].ptime);}}//1255: [蓝桥杯][算法提高]能量项链//1170void nlxl(){int n,i,j,sum=0,maxnl=0,r=-1;scanf("%d",&n);int *arr=(int*)malloc(sizeof(int)*n);for(i=0; i<n; i++)scanf("%d",&arr[i]);for(i=0; i<n; i++) {sum=0;if(n-i>=n)r=n-1;elser=i-1;//printf("r=%d\n",r);j=n-1;int a1,a2;a1=i;a2=a1+1;while(j--) {if(a1==(n-1)) {a2=a1-(n-1);} else if(a1>(n-1)) {a1=a1-(n-1)-1;a2=a1+1;}sum+=arr[r]*arr[a1]*arr[a2];a1++,a2++;}//printf("%d\n",sum);if(maxnl<sum) {maxnl=sum;}}printf("%d\n",maxnl);}//1256: 诡秘的余数void gmdys(){/*int n,m;while(~scanf("%d%d",&n,&m)){printf("%d\n",n%m);}*/char x[2000];int n,i,j,k;while(scanf("%s%d",x,&n)!=EOF) {int ans=0;for(i=0; i<strlen(x); i++) {ans=(ans*10+(x[i]-'0'))%n;}printf("%d\n",ans);}}//1257: 超级楼梯//有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?int zfsl(int n){if(n==1||n==0)return 1;elsereturn zfsl(n-2)+zfsl(n-1);}void cjlt(){int n,m;scanf("%d",&n);while(n--) {scanf("%d",&m);m--;printf("%d\n",zfsl(m));}}//1258: 连续自然数和void pdlxs(int n,int m){int i,min,max,tempsum=0;min=n,max=0;for(i=n; i<=m/2; i++) {tempsum+=i;if(tempsum==m) {max=i;break;} else if(tempsum>m)break;}if(min&&max)printf("%d %d\n",min,max);}void lxzrsh(){int m,i;while(~scanf("%d",&m)) {for(i=1; i<=m/2; i++) {pdlxs(i,m);}printf("\n");}}//1259: 送分题素数//输出100->200之间的素数的个数,以及所有的素数。

C o l l e c t i n g L u g g a g e 算 法 训 练

  C o l l e c t i n g   L u g g a g e 算 法 训 练

WF 2007 (UVaLive 2397) - Collecting LuggageLink To The Problem知识点:二分,最短路,线段和多边形判交-- WF 2007 (UValive 2397 Collecting Luggage-- 知识点:二分,最短路,线段和多边形判交#includeiostream#includecstdio#includecstring#includealgorithm#includecmath#includevector#includequeueusing namespace std;#define FOR(i,a,b) for(int (i)=(a);(i)=(b);(i)++)#define DOR(i,a,b) for(int (i)=(a);(i)=(b);(i)--)#define oo 1e6#define eps 1e-6#define nMax 1010#define pb push_back#define dbg(x) cerr __LINE__ ": " #x " = " x endl#define F first#define S second#define bug puts("OOOOh.");#define zero(x) (((x)0?(x):-(x))eps)#define LL long long#define DB double#define sf scanf#define pf printf#define rep(i,n) for(int (i)=0;(i)(n);(i)++)double const pi = acos(-1.0);double const inf = 1e30;double inline sqr(double x) { return x*x; }int dcmp(double x){if(fabs(x)eps) return 0;return x0?1:-1;-- Describe of the 2_K Geomtry-- First Part : Point and Line-- Second Part Cicle-- Third Part Polygan-- First Part:-- ****************************** Point and Line *******************************class point {double x,y;point (double x=0,double y=0):x(x),y(y) {}void make(double _x,double _y) {x=_x;y=_y;}void read() { scanf("%lf%lf",x,y); }void out() { printf("%.3lf %.3lf",x,y);}double len() { return sqrt(x*x+y*y); }point friend operator - (point const u,point const v) { return point(u.x-v.x,u.y-v.y); }point friend operator + (point const u,point const v) { return point(u.x+v.x,u.y+v.y); }double friend operator * (point const u,point const v){ return u.x*v.y-u.y*v.x; }double friend operator ^ (point const u,point const v) { return u.x*v.x+u.y*v.y; }point friend operator * (point const u,double const k) { return point(u.x*k,u.y*k); }point friend operator - (point const u,double const k) { return point(u.x-k,u.y-k); }friend bool operator (point const u,point const v){if(dcmp(v.x-u.x)==0) return dcmp(u.y-v.y)0;return dcmp(u.x-v.x)0;friend bool operator != (point const u,point const v){return dcmp(u.x-v.x) || dcmp(u.y-v.y);point rotate(double s) {return point(x*cos(s) + y*sin(s),-x*sin(s) + y*cos(s));typedef point Vector;typedef class line{point a,b;line() {}line (point a,point b):a(a),b(b){}void make(point u,point v) {a=u;b=v;}void read() { a.read(),b.read(); }}segment;double det(point u,point v) {return u.x*v.y - u.y*v.x;double dot(point u,point v) {return u.x*v.x + u.y*v.y;-- Weather P is On the Segment (uv)int dot_on_seg(point p,point u,point v){return dcmp(det(p-u,v-p))==0 dcmp(dot(p-u,p-v)) = 0; -- '=' means P is u or v-- The distance from point p to line ldouble PToLine(point p,line l) {return fabs((p-l.a)*(l.a-l.b))-(l.a-l.b).len();-- The ProJect Of Point(p) To Line(l)point PointProjectLine(point p,line l) {double t = dot(l.b-l.a,p-l.a)-dot(l.b-l.a,l.b-l.a);return l.a + (l.b-l.a)*t;-- Weather line u parallel line vint parallel(line u,line v) {return dcmp(det(u.a-u.b,v.a-v.b))==0;-- The Intersection Point Of Line u and Line vpoint intersection(line u,line v) {point ret = u.a;double t = det(u.a-v.a,v.a-v.b)-det(u.a-u.b,v.a-v.b);return ret + (u.b-u.a)*t;-- ****************************** First Part end ********************************-- Second Part:-- ********************************* Circle *************************************struct circle {point O;double r;circle() {};circle(point O,double r):O(O),r(r){};-- ****************************** Second Part End *******************************-- Third Part :-- ********************************* Polygan *************************************int ConvexHull(vectorpoint p){int n=p.size();int m=0;vectorpoint q;q.resize(2*n+5);rep(i,n) {while(m1 dcmp((q[m-1]-q[m-2])*(p[i]-q[m-2])) = 0) m--;q[m++] = p[i];int k = m;for(int i=n-2;i=0;i--) {while(mk dcmp((q[m-1]-q[m-2])*(p[i]-q[m-2])) = 0) m--;q[m++] = p[i];q.resize(m) ;if(m1) q.resize(m-1);-- p = q; -- 是否修改原来的多边形return q.size();-- 三角形重心point Center(point a,point b,point c){return (a+b+c)-3.0;-- Centroid of Polyganpoint Centroid(vectorpoint p){point O(0,0),ret(0,0);int n = p.size();p.pb(p[0]);double area = 0.0;rep(i,n) {ret = ret + Center(O,p[i],p[i+1])*dot(p[i]-O,p[i+1]-O);area += dot(p[i]-O,p[i+1]-O);if(dcmp(area)==0) {pf("There maybe something wrong");return p[0];return ret - area;struct Polygan{vectorpoint g;Polygan() {};Polygan(vectorpoint g):g(g){};Polygan(point p[],int n) {g.clear();rep(i,n) g.pb(p[i]); };int convex() { return ConvexHull(g); }point center() { return Centroid(g); } -- 多边形的重心-- ******************************* Third Part End ********************************double g[nMax][nMax],h[nMax];int vis[nMax];queueint que;double MinDist(int t,int s) {while(!que.empty()) que.pop();rep(i,n+2) vis[i]=0,h[i]=inf;h[s]=0;vis[s]=1;que.push(s);int u,v;while(!que.empty()){u=que.front();que.pop();rep(i,n+1) if(dcmp(g[i][u]-inf)0) {if(dcmp(h[i]-h[u]-g[i][u])0) {h[i]=h[u]+g[u][i];if(!vis[i]){vis[i]=1;que.push(i);vis[u]=0;return h[t];point p[nMax],s;double vs,vp;segment l[nMax];double T,t[nMax],d[nMax];int dot_on_seg_ex(point p,point u,point v){return dcmp(det(p-u,v-p))==0 dcmp(dot(p-u,v-p)) 0; -- '=' means P is u or vint LLJ(line l,point u,point v,point tmp){if(parallel(l,line(u,v))) {if(dot_on_seg(l.a,u,v)) { tmp = l.a ; return -1;}if(dot_on_seg(l.b,u,v)) { tmp = l.b ; return -1;}if(dot_on_seg(u,l.a,l.b)) { tmp = u ; return -1;}if(dot_on_seg(v,l.a,l.b)) { tmp = v ; return -1;}return 0;tmp = intersection(l,line(u,v));if(dot_on_seg_ex(tmp,l.a,l.b) dot_on_seg_ex(tmp,u,v)) return 1;if(dot_on_seg(tmp,l.a,l.b) dot_on_seg(tmp,u,v)) return -1;return 0;int Point_In(point t) {int num=0,i,d1,d2,k;p[n]=p[0];for(i=0;in;i++) {if(dot_on_seg(t,p[i],p[i+1])) return 0;k = dcmp(det(p[i+1]-p[i],t-p[i]));d1 = dcmp(p[i].y-t.y);d2 = dcmp(p[i+1].y-t.y);if(k0 d1=0 d20) num++;if(k0 d2=0 d10) num--;return num!=0;int chk(point a,point b){point tmp;vectorpoint res;res.clear();res.pb(a),res.pb(b);rep(i,n) {d = LLJ(l[i],a,b,tmp);if(d==1) return 0;else if(d==-1) {res.pb(tmp);sort(res.begin(),res.end());rep(i,res.size()-1){if(Point_In((res[i]+res[i+1])-2.0)) return 0;return 1;-*double inline fmod(double x,double mo){int b = (int)(x-mo);x -= b*mo;return x;point find(double cur){cur *= vp;cur = fmod(cur,T);int i=0;while(cur = d[i]) {cur-=d[i];i++;}point n = l[i].b-l[i].a;n = n-n.len();return n*cur + l[i].a;int deal(double cur) {point q = find(cur);rep(i,n) if(chk(q,p[i])) g[i][n+1]=g[n+1][i]=(q-p[i]).len();else g[i][n+1]=g[n+1][i]=inf;if(chk(q,s)) g[n][n+1]=g[n+1][n]=(s-q).len();else g[n][n+1]=g[n+1][n]=inf;double ret = MinDist(n,n+1);return dcmp(ret-cur*vs) = 0;int cas = 1;void work() {p[n]=p[0];rep(i,n) l[i]=line(p[i],p[i+1]);rep(i,n) d[i]=(l[i].a-l[i].b).len();rep(i,n) T += d[i];rep(i,n) for(int j=i+1;jn;j++) if(i!=j) {if(chk(p[i],p[j])) {g[i][j]=g[j][i]=(p[i]-p[j]).len();}else g[i][j]=g[j][i]=inf;rep(i,n) if(chk(s,p[i])) g[i][n]=g[n][i]=(s-p[i]).len();else g[i][n]=g[n][i]=inf;--rep(i,n+1) { rep(j,n+1) pf("%.3lf ",g[i][j]);pf("");} double la=0,ra=1e8;double ans,mid;while(ra-la 1e-8){mid = (la+ra)-2.0;if(deal(mid)) ra=mid;else la=mid;int Base = ((la+ra)*30+0.5+eps);pf("Case %d: Time = %d:%02d",cas++,Base-60,Base%60);int main() {#ifndef ONLINE_JUDGEfreopen("in.txt","r",stdin);freopen("out.txt","w",stdout);while(~sf("%d",n) , n){rep(i,n) p[i].read();s.read();sf("%lf%lf",vp,vs);work();return 0;g[i][j]=g[j][i]=(p[i]-p[j]).len();cra=(xb-xa)*(yc-ya)-(yb-ya)*(xc-xa);printf("Case %d: Time = %d:%02d", cas++, ans-60, ans%60);VIP试题?The Ministers' Major Mess你可以假设乘客位于多边形外。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C提高题二题1:高精度加法在C/C++语言中,整型所能表示的范围一般为-231到231(大约21亿),即使long long型,一般也只能表示到-263到263。

要想计算更加规模的数,就要用软件来扩展了,比如用数组或字符串来模拟更多规模的数及共运算。

现在输入两个整数,请输出它们的和。

输入格式两行,每行一个整数,每个整数不超过1000位输出格式一行,两个整数的和。

样例输入15464315464465465482321654151样例输出15464797786119616数据规模和约定每个整数不超过1000位题2:6-9删除数组中的0元素编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素向数组首端移动。

注意,CompactIntegers函数需要接收数组及其元素个数作为参数,函数返回值应为删除操作执行后数组的新元素个数。

输入时首先读入数组长度,再依次读入每个元素。

将调用此函数后得到的数组和函数返回值输出。

样例输入72 0 43 0 0 5样例输出2 43 54题3:3-2字符串输入输出函数编写函数GetReal和GetString,在main函数中分别调用这两个函数。

在读入一个实数和一个字符串后,将读入的结果依次用printf输出。

两次输入前要输出的提示信息分别是"please input a number:\n”和"please input a string:\n" 样例输入9.56hello样例输出please input a number:please input a string:9.56hello题4:进制转换程序提示用户输入三个字符,每个字符取值范围是0-9,A-F。

然后程序会把这三个字符转化为相应的十六进制整数,并分别以十六进制,十进制,八进制输出。

输入格式:输入只有一行,即三个字符。

输出格式:输出只有一行,包括三个整数,中间用空格隔开。

输入输出样例样例输入FFF样例输出FFF 4095 7777题5:c++_ch06_02编写并测试如下函数:void Add (int a[], int m, int b[], int n);该函数将数组b的前n个元素追加到数组a的前m个元素后,假定数组a具有至少存放m+n个元素的空间。

例如,如果数组a为{22,33,44,55,66,77,88,99},数组b为{20,30,40,50,60,70,80,90},则调用Add(a,5,b,3)后,将把数组a变为{22,33,44,55,66,20,30,40}。

注意数组b并没有改变,而且数组a中只需改变n个元素。

测试输入:4行。

第一行为两个整数:m,n,并以空格隔开,分别表示将要输入的数组a和数组b的元素的个数。

第二行为m个整数,为数组a的元素;第三行为n个整数,为数组b的元素。

第四行为两个整数m1,n1,表示把数组b的前n1个元素追加到数组a的前m1个元素后。

输出:1行。

第一行为最后数组a中的元素,两个元素之间以逗号隔开。

最后一个元素输出后,输出一个空行。

参考程序#include <cassert>#include <iostream>using namespace std;void Disp(int a[], int n){for (int i=0; i<n-1; i++)cout << a[i] << ", ";cout << a[n-1] << endl;}void Add(int a[], int m, int b[], int n) {//...请补充完整}int main(){int* a = NULL;int* b = NULL;int i = 0;int m, n;cin >> m >> n;a = new int[m + n];b = new int[n];for(i = 0; i < m; i++)cin >> a[i];for(i = 0; i < n; i++)cin >> b[i];int m1, n1;cin >> m1 >> n1;// 请补充完整return 0;}题6:c++_ch03_02PASCAL三角是形状如下的三角矩阵:11 11 2 11 3 3 11 4 6 4 1在PASCAL三角中的每个数是一个组合C(n,k)。

C(n,k)=(((((((n/1)(n-1))/2(n-2))/3)***(n-k+2))/(k-1))(n-k+1))/k公式中交替使用乘法和除法,每次将从n开始递减的一个值相乘,然后除以下一个从1开始递增的值。

如果对行和列从0开始计数,则数字C(n,k)在n行k列。

例如C(6,2)在第6行第2列。

编程输出指定阶数的PASCAL三角矩阵。

例如下面给出的是12阶PASCAL三角形矩阵。

编写程序,使运行结果为:11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 11 6 15 20 15 6 11 7 21 35 35 21 7 11 8 28 56 70 56 28 8 11 9 36 84 126 126 84 36 9 11 10 45 120 210 252 210 120 45 10 11 11 55 165 330 462 462 330 165 55 11 11 12 66 220 495 792 924 792 495 220 66 12 1该题的详细文档及程序框架请从网络学堂下载!题7: c++_ch02_03编写程序实现“剪刀,石头,布”游戏。

在这个游戏中,两个人同时说“剪刀”,“石头”或“布”,压过另一方的为胜者。

规则是:“布”胜过“石头”,“石头”胜过“剪刀”,“剪刀”胜过“布”。

要求:选择结构中使用枚举类型,结果的输出也使用枚举类型表示。

输入:两个数,范围为{0,1,2},用空格隔开。

0表示石头,1表示布,2表示剪刀。

这两个数分别表示两个人所说的物品。

输出:如果前者赢,输出1。

如果后者赢,输出-1。

如果是平局,输出0。

题8:c++_ch02_02使用Switch语句编写一个模拟简单计算器的程序。

依次输入两个整数和一个字符,并用空格隔开。

如果该字符是一个“+”,则打印和;如果该字符是一个“-”,则打印差;如果该字符是一个“*”,则打印积;如果该字符是“/”,则打印商;如果该字符是一个“%”,则打印余数。

打印结果后输出一个空行。

题9:Quadratic Equation求解方程ax2+bx+c=0的根。

要求a, b, c由用户输入,并且可以为任意实数。

输入格式:输入只有一行,包括三个系数,之间用空格格开。

输出格式:输出只有一行,包括两个根,大根在前,小根在后,无需考虑特殊情况,保留小数点后两位。

输入输出样例样例输入2.5 7.5 1.0样例输出-0.14 -2.86题10:温度转换编写一个程序,输入一个摄氏温度,输出相应的华氏温度。

在输出时,保留小数点后面两位。

输入格式:输入只有一个整数,即摄氏温度。

输出格式:输出只有一实数,即相应的华氏温度。

输入输出样例样例输入35样例输出95.00题11:征税程序税务局希望你帮他们编写一个征税程序,该程序的功能是:首先输入某公司的年销售额sale和税率rate,然后程序将计算出相应的税额tax,并把它显示在屏幕上。

计算公式是:tax = sale * rate。

输入格式:输入只有一行,包括两个数据,即年销售额和税率。

输出格式:输出只有一行,包括一个实数,即相应的税额,保留到小数点后两位。

输入输出样例样例输入50000.5 0.1样例输出5000.50题12:分数统计给定一个百分制成绩T,将其划分为如下五个等级之一:90~100为A,80~89为B,70~79为C,60~69为D,0~59为E现在给定一个文件inp,文件中包含若干百分制成绩(成绩个数不超过100),请你统计五个等级段的人数,并找出人数最多的那个等级段,按照从大到小的顺序输出该段中所有人成绩(保证人数最多的等级只有一个)。

要求输出到指定文件oup中。

输入格式若干0~100的正整数,用空格隔开输出格式第一行为5个正整数,分别表示A,B,C,D,E五个等级段的人数第二行一个正整数,表示人数最多的等级段中人数接下来一行若干个用空格隔开的正整数,表示人数最多的那个等级中所有人的分数,按从大到小的顺序输出。

样例输入100 80 85 77 55 61 82 90 71 60样例输出2 3 2 2 1385 82 80题13:猜测排名5名选手A,B,C,D,E参加100米赛跑,赛前他们对结果作了如下预测:A说:我不是第一,C不是最后一名B说:A是第一,我是第二C说:B是第一,我不是第三D说:C是第一,我是第二E说:D是第一,我是第三赛后发现每个人刚好说对了一半。

请你编程求出比赛最终排名有哪些可能。

本题要求将结果输出到指定文件oup中。

输出:输出最终排名,为ABCDE五个字母组成的一个排列,表示1~5名对应的选手。

说明假设在你自己机器上的代码为:#include <iostream>#include <fstream>#include <cstdlib>#include <cstdio>#include <cstring>using namespace std;void guess(char *oup){ofstream fout;fout.open(oup);@你的其它代码fout.close();}int main(){guess("filename");return 0;}你提交的代码应该是上面例子的红色部分题14:欧拉函数给定一个大于1,不超过2000000的正整数n,输出欧拉函数,phi(n)的值。

如果你并不了解欧拉函数,那么请参阅提示。

这是一道完善函数的题目,给定输入文件名inp和输出文件名oup,要求从输入文件中读取n,将结果输出到指定文件。

输入格式在给定的输入文件中进行读入:一行一个正整数n。

输出格式将输出信息输出到指定的文件中:一行一个整数表示phi(n)。

样例输入输入文件example.in的内容为:17样例输出输出文件example.out的内容为:16提示欧拉函数phi(n)是数论中非常重要的一个函数,其表示1到n-1之间,与n互质的数的个数。

显然的,我们可以通过定义直接计算phi(n)。

当然,phi(n)还有这么一种计算方法。

相关文档
最新文档