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你可以假设乘客位于多边形外。

c语言排序算法练习题

c语言排序算法练习题

c语言排序算法练习题排序算法是计算机科学中最基础的算法之一,它对于处理大量数据、提高运算效率具有重要意义。

在C语言中,我们可以通过编写不同的排序算法来实现对数据的排序操作。

本文将介绍一些基本的C语言排序算法练习题,帮助读者加深对排序算法的理解。

一、冒泡排序冒泡排序是最为简单的排序算法之一,它的思想是重复地比较相邻的两个元素,如果顺序错误则交换位置,直到整个序列有序为止。

以下是一个冒泡排序的示例代码:```c#include <stdio.h>void bubbleSort(int arr[], int n) {int i, j;for (i = 0; i < n-1; i++) {for (j = 0; j < n-i-1; j++) {if (arr[j] > arr[j+1]) {// 交换位置int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}}int main() {int arr[] = {64, 34, 25, 12, 22, 11, 90}; int n = sizeof(arr)/sizeof(arr[0]);bubbleSort(arr, n);printf("排序后的数组:\n");for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}return 0;}```二、选择排序选择排序是一种简单直观的排序算法,它的工作原理是每一次找到未排序部分中最小的元素,并放到已排序部分的末尾。

以下是一个选择排序的示例代码:```c#include <stdio.h>void selectionSort(int arr[], int n) {int i, j, min_idx;for (i = 0; i < n-1; i++) {min_idx = i;for (j = i+1; j < n; j++) {if (arr[j] < arr[min_idx]) {min_idx = j;}}// 交换位置int temp = arr[min_idx];arr[min_idx] = arr[i];arr[i] = temp;}}int main() {int arr[] = {64, 34, 25, 12, 22, 11, 90};int n = sizeof(arr)/sizeof(arr[0]);selectionSort(arr, n);printf("排序后的数组:\n");for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}return 0;}```三、插入排序插入排序是一种简单直观的排序算法,它工作的方式是将未排序部分的元素逐个插入到已排序部分的合适位置。

c4.5算法 例题

c4.5算法 例题

c4.5算法例题一、算法简介C4.5算法是一种决策树生成算法,它是在C4算法的基础上进行改进得到的,具有更高的生成效率和准确性。

C4.5算法通过选择最佳特征、构建决策树、剪枝优化等步骤,生成可用于分类和预测的决策树模型。

二、算法步骤1. 特征选择:从输入数据中选择出与目标变量相关性最强、信息增益最大的特征作为最佳特征。

2. 构建决策树:根据最佳特征建立决策树的各个节点,每个节点包含一个属性值和一个分支,指向满足该属性值的样本集合。

3. 剪枝优化:通过剪枝算法对决策树进行优化,减少决策树的复杂度,提高模型的准确性和稳定性。

三、例题说明假设我们有一组葡萄酒品质的数据,数据集包括多个特征,如酒精度、酸度、甜度等,目标变量为葡萄酒的品质评分。

我们希望使用C4.5算法构建一个决策树模型,对新的葡萄酒进行品质预测。

1. 准备数据:将数据集导入到数据分析软件中,确保数据格式正确,特征和目标变量分离。

2. 特征选择:使用C4.5算法的特征选择步骤,从多个特征中选择出与品质评分相关性最强、信息增益最大的特征,如酒精度、酸度等。

3. 构建决策树:根据选定的特征,使用C4.5算法构建决策树。

首先,选择酒精度作为最佳特征,建立第一个节点。

根据酒精度的不同值,将样本分为两个子集。

然后,在每个子集中继续选择最佳特征建立分支,不断重复这个过程,直到达到决策树的终止条件(如叶节点)。

4. 剪枝优化:对决策树进行剪枝优化,减少其复杂度。

可以通过设置剪枝阈值、限制树的最大深度等方式进行优化。

5. 模型评估:使用测试数据集对优化后的决策树模型进行评估,评估指标包括准确率、召回率、AUC值等。

四、代码实现由于C4.5算法的实现较为复杂,需要一定的编程知识和技能。

这里以Python语言为例,展示使用Scikit-learn库实现C4.5算法的基本步骤。

假设已经将数据集加载到一个Pandas数据框中,命名为df。

```pythonfrom sklearn.model_selection import train_test_splitfrom sklearn.tree import C4_5, export_graphvizimport graphviz# 划分训练集和测试集X_train, X_test, y_train, y_test =train_test_split(df.drop('quality', axis=1), df['quality'],random_state=42)# 创建C4.5模型对象clf = C4_5()# 训练模型clf.fit(X_train, y_train)# 预测测试集结果y_pred = clf.predict(X_test)# 模型评估accuracy = clf.score(X_test, y_test)print('Accuracy:', accuracy)```五、总结通过以上步骤,我们可以使用C4.5算法构建一个用于葡萄酒品质预测的决策树模型。

2016二级c语言必考题选择题强化训练1

2016二级c语言必考题选择题强化训练1

2016强化训练选择题部分(1)一、选择题:1)下列叙述中正确的是()A) 算法的空间复杂度与算法所处理的数据存储空间有关B) 算法的空间复杂度是指算法程序控制结构的复杂程度C) 算法的空间复杂度是指算法程序中指令的条数D) 压缩数据存储空间不会降低算法的空间复杂度2)下列叙述中正确的是()A) 数据的存储结构会影响算法的效率B) 算法设计只需考虑结果的可靠性C) 算法复杂度是指算法控制结构的复杂程度D) 算法复杂度是用算法中指令的条数来度量的3)设数据集合为D={ 1, 2, 3, 4, 5 }。

下列数据结构B=(D, R)中为非线性结构的是()A) R={ (1,2), (2,3), (3,4), (4,5) }B) R={ (1,2), (2,3), (4,3), (3,5) }C) R={ (5,4), (4,3), (3,2), (2,1) }D) R={ (2,5), (5,4), (3,2), (4,3) }4)下列各组排序法中,最坏情况下比较次数相同的是()A) 希尔排序与堆排序B) 简单插入排序与希尔排序C) 简单选择排序与堆排序D) 冒泡排序与快速排序5)下列排序方法中,最坏情况下时间复杂度(即比较次数)低于O(n^2)的是()A) 快速排序B) 简单插入排序C) 冒泡排序D) 堆排序6)循环队列的存储空间为Q(1:50),初始状态为front=rear=50。

经过一系列正常的入队与退队操作后,front=rear=25,此后又正常地插入了一个元素,则循环队列中的元素个数为()A) 51B) 50C) 46D) 17)设栈的存储空间为S(1:50),初始状态为top=51。

现经过一系列正常的入栈与退栈操作后,top=20,则栈中的元素个数为()A) 31B) 30C) 21D) 208)某二叉树共有400个结点,其中有100个度为1的结点,则该二叉树中的叶子结点数为()A) 149B) 150C) 151D) 不存在这样的二叉树9)某二叉树共有150个结点,其中有50个度为1的结点,则()A) 不存在这样的二叉树B) 该二叉树有49个叶子结点C) 该二叉树有50个叶子结点D) 该二叉树有51个叶子结点10)下面属于“类-对象”主要特征的是()A) 对象一致性B) 对象无关性C) 类的多态性D) 类的依赖性11)下面不属于需求分析阶段工作的是()A) 需求获取B) 可行性研究C) 需求分析D) 撰写软件需求规格说明书12)下面描述正确的是()A) 软件测试是指动态测试B) 软件测试可以随机地选取测试数据C) 软件测试是保证软件质量的重要手段D) 软件测试的目的是发现和改正错误下面不属于需求分析阶段工作的是13)软件生命周期是指()A) 软件的需求分析、设计与实现B) 软件的开发与管理C) 软件的实现和维护D) 软件产品从提出、实现、使用维护到停止使用退役的过程14)在数据库的三级模式结构中,描述数据库中全体数据的全局逻辑结构和特征的是()A) 内模式B) 用户模式C) 外模式D) 概念模式15)下面图中属于软件设计建模工具的是()A) DFD图(数据流程图)B) 程序流程图(PFD图)C) 用例图(USE_CASE图)D) 网络工程图软件生命周期是指16) 数据库(DB)、数据库系统(DBS)和数据库管理系统(DBMS)之间的关系是()A) DB包括DBS和DBMSB) DBMS包括DB和DBSC) DBS包括DB和DBMSD) DBS、DB和DBMS相互独立17)大学中每个年级有多个班,每个班有多名学生,则实体班级和实体学生之间的联系是A) 一对多B) 一对一C) 多对一D) 多对多18)医院里有不同的科室,每名医生分属不同科室,则实体科室与实体医生间的联系是()A) 一对一B) 一对多C) 多对一D) 多对多19)有三个关系R、S和T如下:则由关系R、S得到关系T的操作是()A) 交B) 投影C) 自然连接D) 并20)()A) 投影B) 选择C) 交D) 差21)以下叙述错误的是()A) 任何能通过编译和运行的算法都一定能得到所期望的结果B) 一个算法所包含的操作步骤应该是有限的C) 算法中每一条指令必须有确切的含义D) 算法可以用各种描述方法来进行描述22)以下选项中,合法的C语言常量是()A) 1.234B) 'C++'C) "\2.0D) 2Kb23)有以下程序#include <stdio.h>main(){ ints,t,A=10;double B=6;s=sizeof(A);t=sizeof(B);printf("%d,%d\n",s,t);}在VC6平台上编译运行,程序运行后的输出结果是()A) 4.8B) 4.4C) 2.4D) 0.624)若有定义语句:intx=10;则表达式x-=x+x的值为()A) 10B) -20C) 0D) -1025)关于程序模块化,以下叙述错误的是()A) 程序模块化可以提高程序运行的效率B) 程序模块化可以提高程序编制的效率C) 程序模块化可以提高程序代码复用率D) 程序模块化可以提高调试程序的效率26)若有定义:double a=22; int i=0,k=18;则不符合C语言规定的赋值语句是()A) a=a++,i++;B) i=(a+k)<=(i+k);C) i=a%11;D) i=!a;27)以下选项中不能在C语言程序中用作用户标识符的是()A) autoB) scanfC) FloatD) _3_1428)以下叙述错误的是()A) 若用户标识符的命名与预定义标识符相同,命名无效B) 若用户标识符的命名与关键字相同,将产生编译错误C) 若用户标识符的命名与预定义标识符相同,预定义标识符失去原有含义D) 若用户标识符的命名与预定义标识符相同,可能引发运行错误29)以下选项中,合法的C语言实数是()A) .4e0B) 4.3e0.2C) E4.8D) 0.29E30)设有语句:printf("%2d\n",2010);,则以下叙述正确的是()A) 程序运行时输出2010B) 程序运行时输出20C) 程序运行时输出10D) 指定的输出宽度不够,编译出错31)设有定义:double x;,以下选项中不能将输入数据3.14读入赋给变量x的是()A) scanf("%4.2f",&x);B) scanf("%lf",&x);C) scanf("%le",&x);D) scanf("%4lf",&x);32)以下选项中,与k = n++完全等价的表达式是()A) k=n, n=n+1B) n=n+1, k=nC) k = ++nD) k += n+133)以下不属于C语言整型常量的是()A) 0LB) -018C) 0XaD) 200U34)有以下程序#include<stdio.h>main(){ int x=1, y=0;if (!x) y++;else if (x==0)if (x) y+=2;else y+=3;printf("%d\n", y);}程序运行后的输出结果是()A) 1B) 2C) 0D) 335)若有定义:float x=1.5;int a=1,b=3,c=2;则正确的switch语句是()A) switch(a+b){ case 1: printf("*\n");case 2+1: printf("**\n"); }B) switch((int)x);{ case 1: printf("*\n");case 2: printf("**\n"); }C) switch(x){ case 1.0: printf("*\n");case 2.0: printf("**\n"); }D) switch(a+b){ case 1: printf("*\n");case c: printf("**\n"); }36)若变量已正确定义,在if (W) printf("%d\n" ,k ); 中,以下不可替代W的是()A) a<>b+cB) ch=getchar()C) a==b+cD) a++37)有以下程序段#include <stdio.h>inta, b, c;a=10; b=50; c=30;if (a>b) a=b, b=c; c=a;printf("a=%d b=%d c=%d\n", a, b, c);程序的输出结果是()A) a=10 b=50 c=10B) a=10 b=50 c=30C) a=10 b=30 c=10D) a=50 b=30 c=5038)有以下程序#include <stdio.h>main( ){ int a=0, b=0;for( ;a<7; a++ ){ if (a%2==0) continue;b += a;continue;}printf( "%d \n", b );}程序运行后的输出结果是()A) 0B) 4C) 1D) 939)以下关于循环语句的叙述中正确的是()A) do-while语句的循环体至少执行一次B) while语句的循环体至少执行一次C) for语句的循环体至少执行一次D) 上述A、B、C说法均正确40)有以下程序#include <stdio.h>main(){ intx,y=0,z=0,t;do{ scanf("%d",&x);t=x>0;switch (t){ case 0: break;case 1: y+=x; continue;}z+=x;}while(x);printf("%d,%d\n",y,z);}程序运行时输入:-1 1 -2 2 0<回车>,则输出结果是()A) 1,1B) 1,0C) 3,-3D) 3,041)若有以下程序#include <stdio.h>main(){ char a='5', b;a++;printf("%d,%d\n", a-'5'+255, b=a- '5');}执行后的输出结果是()A) 256,1B) 1,256C) 255,1D) 256,042)有以下程序#include <stdio.h>main( ){ inta=7, b=0;do { b += a; a -=1; } while ( a-- ) ;printf( "%d,%d\n", b, a );}执行后的输出结果是()A) 28,0B) 28,1C) 16,0D) 16,-143)有以下程序#include <stdio.h>main(){ int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;for(i=0; i<3; i++)for(j=i;j<=i;j++) t+=b[i][b[j][i]];printf("%d\n",t);}程序运行后的输出结果是()A) 3B) 4C) 1D) 044)以下选项中能正确定义二维数组的选项是()A) double a[][3]={ 2*3 };B) double a[][3];C) double a[][3]={ };D) double a[2]45)有以下程序#include <stdio.h>main(){ intx,a=1,b=1;while(1){ scanf("%d",&x);if(x>0) { a*=x; break; }if(x<0) { b*=x; continue; }printf("%d,%d\n",a,b);}}程序运行时输入:-1 -2 0 1 2 <回车>,则输出结果是()A) 1,2B) 2,2C) -1,1D) -2,146)若有函数定义如下int fun(intx,int y){ return x-y; }则以下涉及上述函数的说明语句错误的A) int fun( intx,y );B) int fun( int ,int );C) int fun( inta,int b );D) inti,fun(intx,int y);47)有以下程序#include <stdio.h>main(){ int x[3][2]={0}, i;for(i=0; i<3; i++) scanf("%d",x[i]);printf("%3d%3d%3d\n",x[0][0],x[0][1],x[1][0]); }若运行时输入:2 4 6<回车>,则输出结果为A) 2 4 6B) 2 0 0C) 2 4 0D) 2 0 448)有以下程序#include <stdio.h>int f(int n);main(){ int a=3,s;s=f(a);s=s+f(a); printf("%d\n",s);}int f(int n){ static int a=1;n+=a++;return n;}程序运行后的输出结果是A) 7B) 8C) 9D) 1049)有以下部分程序#include <stdio.h>void f( int );main(){ void f( int );f(5);}void f( int n ){ printf("%d\n", n ); }以下叙述中错误的是A) f函数中不可以出现return语句B) 在主函数中,f(5) ;可以正确调用f函数C) 在主函数后的其他函数可以正确调用f函数D) f函数无返回值,应当定义成void类型50)有以下程序#include <stdio.h>main(){ char s[][6]={"abcd","abc","ab"}; int i;for( i=0;i<3;i++ ) puts(s[i]);}执行后的输出结果是()A) abcdabcabB) aaaC) abcdbcdcdD) abc51)有以下程序# include <stdio.h>main( ){ int i=3,j=5, *p=&i, *q=&j, **r;r = &q;printf("%d,%d,%d,%d,%d\n", i, j, *p, *q, **r);}执行后的输出结果是()A) 3,5,3,5,5B) 5,3,5,3,5C) 3,5,3,5,3D) 3,5,3,3,552)以下不能使指针s所指存储单元的值增1的选项是()A) (*s)++;B) *s=*s+1;C) *s++;D) ++*s;53)若有以下函数int fun(char *a, char *b){ intbk=0;while( (*a!='\0')&&(*b!='\0') &&strlen(a)==strlen(b) ){ if(*b != *a) { bk=0; break; }a++; b++; bk=1;}return bk;}此函数的功能是()A) 判断a和b两个字符串是否相等B) 将字符串a改名为字符串bC) 将字符串变量a的值赋赋给字符串变量bD) 检查字符串a和b中是否有'\0'54)以下语句中存在语法错误的是()A) char ss[6][20]; ss[1]= "right?";B) char ss[ ][20]={ "right?"};C) char *ss[6]; ss[1]= "right?";D) char *ss[ ]={ "right?"};55)设有如下定义和语句[1] char *s; s="string";[2] char s[7]; s="string";[3] char s[ ]="string";[4] char s[ ]={'s','t','r','i','n','g'};其中定义项可以作为字符串使用的是()A) [1]和[4]B) [1]和[2]C) [1]和[3]D) [3]和[4]56)有以下程序#include <stdio.h>int fun(){ staticint x=1;x*=2;return x;}main(){ int i, s=1;for( i=1; i<=3; i++ ) s*=fun( );printf("%d\n", s);}程序运行后的输出结果是()A) 30B) 10C) 0D) 6457)有以下程序(注:字符a的ASCII码值为97) #include <stdio.h>main(){ char *s ={ "abc" };do{ printf ("%d", *s%10); ++s; }while ( *s );}程序运行后的输出结果是()A) abcB) 789C) 7890D) 97989958)有以下程序#include <stdio.h>#include <string.h>main( ){ int i, len;char b[]="Welcome you to Beijing!";len = strlen(b);for ( i=0; b[i]!=’\0’;i++)if ( b[i] == ' ' ){ strcpy(b, b+i+1);i=0;}printf( "%s\n", b );}程序运行后的输出结果是()A) Beijing!B) to Beijing!C) Welcome you to Beijing!D) you to Beijing!59)以下关于字符串处理的叙述正确的是()A) 进行字符串复制时,目的串的存储空间必须足够大B) 两个字符串进行比较时,短的一个必定比长的一个小C) 计算一个字符串的长度时,应包含串尾的结束标志D) 两个字符串连接时,对存储空间的大小没有要求60)有以下程序#include <stdio.h>double fun(int n){ static double f=1;f *= n;return f;}main(){ int i;double s=0;for(i=1; i<6; i++)s+=fun(i);printf("%lf\n", s);}程序计算的是()A) s=1!+2!+3!+4!+5!B) s=1+2+3+4+5C) s=1*2*3*4*5D) s=1!*2!*3!*4!*5!61)下面结构体的定义语句中,错误的是()A) structord {intx;inty;int z;} structord a;B) structord {intx;inty;int z;}; structord a;C) structord {intx;inty;int z;} a;D) struct{intx;inty;int z;} a;62)有以下程序#include <stdio.h>structS{ int a, b; } data[2]={10,100,20,200};main(){ structS p=data[1];printf("%d\n", ++(p.a) );}程序运行后的输出结果是()A) 10B) 11C) 20D) 2163)以下叙述中正确的是()A) 当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失B) 打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖C) 在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第1个数据D) C语言中的文件是流式文件,因此只能顺序存取数据64)有以下程序#include <stdio.h>main(){ FILE *fp; int a[10]={1,2,3}, i, n;fp = fopen("d1.dat", "w");for (i=0; i<3; i++) fprintf(fp, "%d", a[i]);fprintf(fp, "\n");fclose(fp);fp = fopen("d1.dat", "r");fscanf(fp, "%d", &n);fclose(fp);printf("%d\n", n);}程序的运行结果是()A) 123B) 12300C) 1D) 32165)有以下程序#include <stdio.h>#define MUL1(x,y) x*y#define MUL2(x,y) (x)*(y)#define MUL3(x,y) (x*y)main(){ int m=2,n=3;printf( "%d,%d,%d\n",MUL1(m,m+n)*2,MUL2(m,m+n)*2,MUL3(m,m+n)*2 );}程序运行后的输出结果是()A) 10,20,14B) 20,20,20C) 10,10,10D) 14,14,1466)有以下程序#include <stdio.h>main( ){ FILE *fp;inti, a[6] = {1,2,3,4,5,6}, k;fp = fopen("data.dat", "w+b"); fwrite(&a[0], sizeof(int), 1, fp); for (i=1; i<6; i++){fseek(fp, 0L, 0);fwrite(&a[i], sizeof(int), 1, fp);}fseek(fp, 0L, 0);fread(&k, sizeof(int), 1, fp); fclose(fp);printf("%d\n", k);}程序运行后的输出结果是()A) 123456B) 21C) 6D) 65432167)有以下程序#include <stdio.h>#define S(x) (x/x)*xmain( ){ int k=6, j=3;printf( "%d,%d\n", S(k+j), S(j+k) ); }程序运行后的输出结果是()A) 57,39B) 57,57C) 9,9D) 39,3968)有以下程序<stdio.h>#include <stdio.h>void fun( int a ){ if( a>1 ) fun(a-1);printf("%d ",a);}main(){ int q=5; fun(q); printf("\n"); }执行后的输出结果是()A) 1 2 3 4 5B) 5 4 3 2 1C) 0 1 2 3 4 5D) 5 4 3 2 1 069)以下关于C语言文件的叙述中正确的是()A) 文件由数据序列组成,其类型可以为二进制文件或文本文件B) 文件由记录序列组成,其类型可以为二进制文件或文本文件C) 文件由字符序列组成,其类型可以为二进制文件或文本文件D) 文件由数据序列组成,其类型只能是二进制文件70)设有定义和语句(假设short int型数据占2字节)shortint *pi,*pj;pi=pj=(short *)malloc(2);则以下叙述正确的是()A) pi和pj指向了同一个short int型存储单元B) pi和pj指向了2个连续的short int型存储单元的首地址C) pi和pj分别指向了一个short int型存储单元D) pi和pj分别指向了2个short int型存储单元71)若要通过位运算使整型变量a中的各位数字全部清零,以下选项正确的是()A) a=a&0;B) a=a|0;C) a=a^0;D) a=!a;72)程序中若有以下的说明定义和语句#include <stdio.h>#includestructSTR{ char num[10]; int s; };main(){ structSTR t, *p;p=&t;┇}则不能给变量t的s成员赋整数99,给num成员赋空串的语句组是()A) (*p).s=99; (*p).num="";B) p->s=99; p->num[0]=0;C) (*p).s=99; p->num[0]= '\0';D) p->s=99; strcpy((*p).num, "")73)有以下程序#include <stdio.h>int fun(int a){ int b=2;static int c=2;b++; c--; return(a+b+c);}main( ){ int k, a=2;for (k=0; k<3; k++) printf("%d", fun(a));printf("\n");}执行后的输出结果是()A) 678B) 666C) 654D) 45674)有定义语句:int i; char s1[10], s2[10]= "Program"; 则能正确给s1数组赋字符串的语句是()A) for(i=0; i<=7; i++) s1[i]=s2[i];B) s1=s2;C) while(s2) s1++ =s2++;D) for(i=0; s2[i]; i++ ) s1[i]=s2[i];75)以下程序拟读取一个姓氏,查找其对应的年龄并输出#include <stdio.h>#include <string.h>#include <stdlib.h>struct person { char name[10]; int age;};struct person group[6]={ "zhang", 18,"wang",20,"li",19,"zhao",18,"liu",19},*p;main(){ inti,flag=0;p=(struct person *)malloc(sizeof(struct person));gets( &p->name );for(i=0; i<6; i++)if( (strcmp(p->name,group[i].name )==0)){ printf("%d\n",group[i].age );flag=1;}if(flag==0) printf("No find!\n");}程序有语法错,出错的是()A) gets( &p->name );B) p=(struct person *)C) if( (strcmp(p->name,group[i].name )==0))D) printf("%d\n",group[i].age );76)有以下程序#include <stdio.h>#includemain(){ FILE *fp;char ch,str[5];if((fp=fopen("file.txt","wb+"))==NULL){ printf("error!\n"); exit(0); }ch=getchar();while( ch!='!'){ fputc(ch,fp);ch=getchar();}rewind(fp);do{fgets(str,4,fp);puts(str);}while(!feof(fp));fclose(fp);}程序运行时输入:c:\\test!<回车>,则程序的输出结果是()A) c:\\testB) c:\ testC) c: testD) c:\test二、程序操作题目:1、填空题:(1)函数fun的功能是:将一副扑克牌编号为1,2,3,…,53,54,以某种特定的方式洗牌,这种方式是将这副牌分成两半,然后将它们交叉,并始终保持编号为1的牌在最上方,譬如第一次这样洗牌后的结果为:1,28,2,29,…,53,27,54。

《C语言》程序算法练习题

《C语言》程序算法练习题

完成下列训练题的基本步骤是:1、问题分析及解决方案框架确定充分地分析和理解问题本身,明确问题到底要做什么。

(what to do?)在确定解决问题框架过程中(how to do?),考虑怎样使程序结构清晰、合理、简单和易于调试,并确定每个函数的简单功能,以及函数之间的调用关系。

2、详细设计和编码确定算法的主要流程,在此基础上进行代码设计(coding),一般来讲,每个明确的功能模块程序不超过60行代码,否则,功能要继续分解。

3、上机前编写程序与检查上机前检查程序可有效提高调试效率,减少上机调试程序时的无谓错误。

程序检查主要有两种途径:用一组测试数据手工执行程序;或者通过阅读或给别人讲解自己的程序而深入、全面地理解程序逻辑,把程序中的明显错误事前排除。

4、上机调试程序提供的结果应当包括:算法、数据结构的设计、程序清单1、猜数游戏游戏的开始由机器产生一个随机数(1~100之间,用库函数random()取值),然后游戏者在程序的提示下猜数,若输入的数比这个数大,程序提示“your answer is HIGH,try again!”否则,程序提示“your answer is LOW,try again!”直到猜对为止。

程序可以实现连续猜数,直到游戏者退出。

程序输出要求:累计游戏者猜对这个数所需的次数n,当n<=7时,给出“congratulation!”,当7<n<15时,给出“I believe you can do it better!”;当n>15时,用exit(0)库函数退出程序。

2、百钱百鸡问题(穷举算法)我国古代数学家张丘建在《算经》中出了一道题“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。

百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?”注:穷举法是最简单、最常见的一种程序设计方法,它充分利用了计算机处理的高速特性。

使用穷举法的关键是确定正确的穷举范围,即不能过分扩大,也不能过分缩小穷举的范围。

算法训练测试题及答案

算法训练测试题及答案

算法训练测试题及答案
一、选择题
1. 以下哪种算法属于贪心算法?
A. 动态规划
B. 回溯算法
C. 贪心算法
D. 分支限界法
答案:C
2. 在二叉树的遍历算法中,前序遍历的顺序是什么?
A. 根-左-右
B. 左-根-右
C. 右-根-左
D. 根-右-左
答案:A
3. 快速排序算法的时间复杂度在最好情况下是?
A. O(n^2)
B. O(nlogn)
C. O(n)
D. O(1)
答案:B
二、填空题
1. 在图论中,一个图中所有顶点的度数之和等于图中边数的_____倍。

答案:2
2. 动态规划算法解决的问题通常具有_____性质。

答案:最优子结构
3. 哈希表的平均查找时间复杂度是_____。

答案:O(1)
三、简答题
1. 请简述分治算法的基本思想。

答案:分治算法的基本思想是将一个复杂的问题分解成若干个相同或相似的子问题,递归地解决这些子问题,然后将子问题的解合并以解决原问题。

2. 什么是深度优先搜索(DFS)?
答案:深度优先搜索是一种用于遍历或搜索树结构或图的算法。

它从根节点开始,尽可能深地搜索树的分支,回溯到上一个节点后,再继续搜索下一个分支。

四、编程题
1. 给定一个整数数组,请编写一个函数,使用快速排序算法对数组进行排序,并返回排序后的数组。

答案:[此处应提供快速排序算法的具体代码实现]
结束语:通过以上题目的练习,可以帮助你更好地理解和掌握算法的基本概念和应用。

希望这些测试题能够对你的学习有所帮助。

数据结构与算法复习题10(C语言版)讲课稿

数据结构与算法复习题10(C语言版)讲课稿

数据结构与算法复习题10(C语言版)习题9解答判断题:1.用向量和单链表表示的有序表均可使用折半查找方法来提高查找速度。

答:FALSE (错。

链表表示的有序表不能用折半查找法。

)2.有n个数据放在一维数组A[1..n]中,在进行顺序查找时,这n个数的排列有序或无序其平均查找长度不同。

答:FALSE (错。

因顺序查找既适合于有序表也适合于无序表;对这两种表,若对于每个元素的查找概率相等,则顺序查找的ASL相同,并且都是(n+1)/2;对于查找概率不同的情况,则按查找概率由大到小排序的无序表其ASL要比有序表的ASL小。

)3.折半查找是先确定待查有序表记录的范围,然后逐步缩小范围,直到找到或找不到该记录为止。

( )答:TRUE4.哈希表的查找效率主要取决于哈希表哈希表造表时选取的哈希函数和处理冲突的方法。

答:TRUE5.查找表是由同一类型的数据元素(或记录)构成的集合。

答:TRUE单选题:6.对于18个元素的有序表采用二分(折半)查找,则查找A[3]的比较序列的下标为( )。

A. 1、2、3B. 9、5、2、3C. 9、5、3D.9、4、2、3答:D (第一次⎣⎦2/)181(+ = 9,第二次⎣⎦2/)81(+ = 4,第三次⎣⎦2/)31(+ = 2, (第四次⎣⎦2/)33(+ = 3,故选D.7. 顺序查找法适合于存储结构为____________的线性表。

A.散列存储B.顺序存储或链式存储C.压缩存储D.索引存储答:B8.对线性表进行二分查找时,要求线性表必须( )。

A .以顺序方式存储 B. 以链接方式存储C .以顺序方式存储,且结点按关键字有序排序D. 以链接方式存储,且结点按关键字有序排序答:C9.设哈希表长m=14,哈希函数为H(k) = k MOD 11。

表中已有4个记录(如下图所示),如果用二次探测再散列处理冲突,关键字为49的记录的存储地址是( )。

A .8 B. 3 C .5 D. 9答:D (计算H(k),即H(49)=49 mod 11 = 5,冲突,进行二次探测再散列。

c语言经典算法题

c语言经典算法题

c语言经典算法题
C语言经典算法题目涵盖了多个领域,包括排序、查找、递归、动态规划等。

以下是一些经典的C语言算法题目,它们对于提高编程能力和理解算法思想都是很有帮助的:
1. 冒泡排序:
实现冒泡排序算法,对一个数组进行升序或降序排序。

2. 快速排序:
实现快速排序算法,对一个数组进行升序或降序排序。

3. 选择排序:
实现选择排序算法,对一个数组进行升序或降序排序。

4. 二分查找:
实现二分查找算法,在有序数组中查找一个特定的元素。

5. 递归:
编写一个递归函数,计算斐波那契数列的第n 个数字。

6. 动态规划:
解决经典的动态规划问题,比如背包问题、最长公共子序列等。

7. 链表反转:
反转一个单链表或双链表。

8. 树的遍历:
实现二叉树的前序、中序和后序遍历。

9. 图的深度优先搜索(DFS)和广度优先搜索(BFS):
实现图的深度优先搜索和广度优先搜索算法。

10. 最短路径算法:
实现Dijkstra算法或Floyd-Warshall算法来求解图中的最短路径。

11. 素数判断:
编写一个函数判断一个给定的数是否是素数。

12. 最大公约数和最小公倍数:
实现求两个数的最大公约数和最小公倍数的算法。

这些题目旨在帮助你熟悉常见的算法思想和数据结构,提高编程和问题求解的能力。

解决这些题目时,不仅要注重正确性,还要考虑算法的效率和优化。

c4.5决策树算法例题

c4.5决策树算法例题

c4.5决策树算法例题例题:预测鸢尾花分类题目描述:给定鸢尾花的三种类型:山鸢尾(setosa)、杂色鸢尾(versicolor)和维吉尼亚鸢尾(virginica),以及鸢尾花的四个特征:花萼长度、花萼宽度、花瓣长度和花瓣宽度。

使用这些特征来预测鸢尾花的类型。

数据集:以下是一个鸢尾花数据集的样例,每一行表示一个样本,每个特征用一个数字表示。

最后一列是鸢尾花的类型。

1.4 3.5 5.1 1.7 setosa5.0 3.6 5.5 2.6 versicolor4.9 3.05.1 1.8 virginica解题思路:使用C4.5决策树算法对鸢尾花数据集进行分类。

首先,我们需要将数据集分成训练集和测试集,然后使用训练集训练决策树模型。

在训练过程中,我们需要计算每个特征的信息增益率,选择信息增益率最大的特征作为划分标准。

在每个节点处,我们需要计算划分后的数据集的纯度,选择最优的划分标准。

最后,我们使用测试集对决策树模型进行评估,计算分类准确率。

C4.5决策树算法的具体步骤如下:1. 将数据集分成训练集和测试集。

2. 初始化根节点,选择一个特征作为划分标准,计算划分后的数据集的纯度。

3. 如果数据集的纯度已经达到要求,则将该节点标记为叶子节点,并将该节点的类标签作为最终分类结果。

4. 如果数据集的纯度未达到要求,则选择信息增益率最大的特征作为划分标准,将数据集划分为子数据集。

5. 对每个子数据集重复步骤2-4,直到满足停止条件。

6. 构建决策树,将每个节点的最优划分标准记录下来。

7. 使用测试集对决策树模型进行评估,计算分类准确率。

算法与数据结构C语言习题参考答案6-9章

算法与数据结构C语言习题参考答案6-9章

1. 现在有一个已排序的字典,请改写二分法检索算法,使之当排序码key在字典中重复出现时算法能找出第一个key出现的元素下标(用*position来保存)。

保持算法时间代价为O(log n)。

【答】思路一般的二分法检索算法只要找出关键码key在字典中的一个下标。

在比较的过程中,一旦发现相等,记录下当前下标mid就符合要求。

程序如下:数据结构字典采用6.1.4节中的顺序表示法。

typedef int KeyType;typedef int DataType;二分法检索算法int binarySearch(SeqDictionary * pdic, KeyType key, int * position) {int low, mid, high;low = 0;high = pdic->n - 1;while (low <= high){mid = (low + high) / 2;if (pdic->element[mid].key = = key) {*position = mid;return TRUE;}elseif (pdic->element[mid].key > key)high = mid - 1;elselow = mid + 1;}*position = low;return FALSE;}改写后的算法想要找出关键码key在字典中第一次出现的下标。

在比较中,如果遇到相等(key与pdic->element[mid].key相等),则需要分情形讨论。

(1)如果当前下标mid等于0,或者key与pdic->element[mid-1].key不等,那么mid 一定是key第一次出现的下标,返回mid即可。

(2)如果情形(1)不成立,那么mid一定大于等于key第一次出现的下标,需要在low 和mid-1之间继续进行搜索,找出key第一次出现的下标。

c语言算法刷题

c语言算法刷题

c语言算法刷题好的,以下是一篇完整的《C语言算法刷题》文档:==========一、引言----C语言算法刷题是一个非常实用的学习工具,它可以帮助开发者提高C语言算法和数据结构的应用能力。

通过解决实际问题的过程,你可以加深对算法和数据结构的理解,同时提高你的编程技能。

二、刷题内容------本刷题集涵盖了C语言中的常见算法和数据结构,包括但不限于排序、搜索、遍历、图论、动态规划等。

这些题目可以帮助你理解各种算法的实现原理,并提高你的编程技巧。

三、刷题方法------###1.先易后难建议从简单的题目开始刷起,逐步挑战更难的题目。

这样可以帮助你建立信心,同时也可以让你更好地理解算法和数据结构。

###2.注重理解在解决每个问题时,不要只关注答案,更要注重理解题目背后的算法原理。

尝试使用多种方法来解决同一问题,这样可以加深你的理解。

###3.测试与调试在编写代码后,一定要进行充分的测试,确保代码的正确性。

如果有误差,要仔细分析原因并改进代码。

四、常见问题与解决方法------------###1.内存溢出如果你的代码出现了内存溢出的问题,可能是由于内存泄漏或者算法实现有误导致的。

要仔细检查你的代码,确保没有内存泄漏,同时也要检查你的算法实现是否正确。

###2.运行时错误如果你的代码出现了运行时错误,可能是由于语法错误或者逻辑错误导致的。

要仔细检查你的代码,确保没有语法错误,同时也要检查你的逻辑是否正确。

###3.结果不正确如果你的代码得到的结果与预期不符,可能是由于算法实现有误或者测试数据不正确导致的。

要仔细检查你的算法实现,同时也要检查你的测试数据是否符合要求。

五、推荐资源------###1.C语言官方文档这是学习C语言算法的基础资源,你可以在这里找到关于C语言的各种信息和文档。

###2.刷题网站例如LeetCode、HackerRank等网站提供了大量的C语言算法题目。

这些网站不仅提供了题目和答案,还提供了详细的解题思路和算法实现,非常适合用来刷题。

  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)还有这么一种计算方法。

相关文档
最新文档