c语言职业竞赛竞赛题求解

基于visual Studio2013解决C语言竞赛题之4倍数 - 下载频道
- CSDN.NET
&&&&基于visual Studio2013解决C语言竞赛题之4倍数
基于visual Studio2013解决C语言竞赛题之4倍数
有一个四位正整数,组成这个四位数的四个数字各不相同,如果把它们的首尾互换,
第二位与第三位互换,组成一个新的四位数。原四位数为新四位数的4倍
,请找出一个这样的四位数
若举报审核通过,可奖励20下载分
被举报人:
yincheng01
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
您可能还需要
课程资源下载排行C语言题解(1-3)_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C语言题解(1-3)
上传于||文档简介
&&C​语​言​ ​题​解
阅读已结束,如果下载本文需要使用
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩14页未读,继续阅读
你可能喜欢算法竞赛入门经典第一章习题解答,有需要的朋友可以参考下。习题1-1 平均数(average)/*
题目:平均数(average)
描述:输入3个整数,求出他们的平均值,保留三位小数*/#include&cstdio&int main(){
int num1,num2,num3;
scanf(&%d%d%d&,&num1,&num2,&num3);
double ave=(num1+num2+num3)/3.0;
printf(&%.3lf/n&,ave);
return 0;}习题1-2 温度(temperature)/*
题目:温度(temperature)
描述:输入华氏温度f,输出对应的摄氏温度c,保留三位小数。提示:c=5(f-32)/9;*/#include&cstdio&int main(){
double c,f;
scanf(&%lf&,&f);
c=5*(f-32)/9.0;
printf(&%.3lf/n&,c);
return 0;}习题1-3 求和 (sum)/*
题目:连续和(sum)
描述:输入正整数n,输出1+2+3+...+n的值。提示:目标是解决问题,不是练习编程。*/#include&cstdio&int main(){
scanf(&%d&,&n);
int sum=n*(n+1)/2;
printf(&%d/n&,sum);
return 0;}习题1-4 正弦和余弦(sincos)/*
题目:正弦和余弦(sum)
描述:输入正整数n(n&360),输出n度的正弦、余弦函数值*/#include&cstdio&#include&cmath&#include&cstdlib&#include&cstdio&const double pi=4.0*atan(1.0);int main(){
scanf(&%d&,&n);
printf(&%lf %lf/n&,sin(n/180.0*pi),cos(n/180.0*pi));
return 0;}习题1-5 距离(distance)/*
题目:距离(distance)
描述:输入4个浮点数x1,y1,x2,y2,输出平面坐标系中点(x1,y1)到(x2,y2)的距离*/#include&cstdio&#include&cmath&#include&cstdlib&#include&cstdio&#include&cmath&int main(){
double x1,y1,x2,y2;
scanf(&%lf%lf%lf%lf&,&x1,&y1,&x2,&y2);
printf(&%lf/n&,sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)));
return 0;}习题1-6 偶数(odd)/*
题目:偶数(odd)
描述:输入一个整数,判断它是否为偶数。如果是,则输出&yes&,否则输出&no&。*/#include&cstdio&#include&cmath&#include&cstdlib&#include&cstdio&#include&cmath&int main(){
while(scanf(&%d&,&n)==1)
{if(n%2==0){printf(&yes/n&);}else{printf(&no/n&);}
return 0;}习题1-7 打折(discount)/*
题目:打折(discount)
描述:一件衣服95元,若消费满300元,可打八五折。输入购买衣服件数,输出需要支付的金额(单位:元),保留两位小数。*/#include&cstdio&#include&cmath&#include&cstdlib&#include&cstdio&#include&cmath&int main(){
while(scanf(&%d&,&n)==1)
{if(n&3){printf(&%.2lf/n&,95*n*0.95);}else{printf(&%.2lf/n&,95*n*1.0);}
return 0;}习题1-8 绝对值(abs)/*
题目:绝对值(discount)
描述:输入一个浮点数,输出它的绝对值,保留两位小数。*/#include&cstdio&#include&cmath&#include&cstdlib&#include&cstdio&#include&cmath&int main(){
while(scanf(&%lf&,&n)==1)
{printf(&%.2lf/n&,fabs(n));
return 0;}习题1-9 三角形 (triangle)/*
题目:三角形(triangle)
描述:输入三角形三边长度值(均为正整数),判断它是否能为直角三角形的三个边长,如果可以,输出&yes&,否则输出&no&。如果根本无法构成三角形,则输出&not a triangle&。*/#include&cstdio&#include&cmath&#include&cstdlib&#include&cstdio&#include&cmath&int main(){
int a,b,c;
scanf(&%d%d%d&,&a,&b,&c);
if(a+b&c&&a+c&b&&c+b&a)
{if(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a){printf(&yes/n&);}else{printf(&no/n&);}
{printf(&not a triangle/n&);
return 0;}习题1-10 年份(year)/*
题目:年份(year)
描述:输入年份,判断是否为闰年。如果是,则输出&yes&,否则输出&no&。*/#include&cstdio&#include&cmath&#include&cstdlib&#include&cstdio&#include&cmath&int main(){
scanf(&%d&,&year);
if((year%4==0&&year%100!=0)||(year%400==0))
{printf(&yes/n&);
{printf(&no/n&);
return 0;}共有 429 人关注过本帖
标题:杭州电子科技大学 Online Judge 之 “确定比赛名次(ID1285)”解题报告
来 自:宁波余姚
等 级:业余侠客
帖 子:159
专家分:273
结帖率:46.15%
&&已结贴√
&&问题点数:3&&回复次数:6&&&
杭州电子科技大学 Online Judge 之 “确定比赛名次(ID1285)”解题报告
杭州电子科技大学Online Judge 之 “确定比赛名次(ID1285)”解题报告
巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozhuo)
Problem Description
有N个比赛队(1&=N&=500),编号依次为1,2,3,。。。。,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,
但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比赛的结果,即P1赢P2,用P1,P2表示,排名时P1在P2之前。现在请你编程序确定排名。
输入有若干组,每组中的第一行为二个数N(1&=N&=500),M;其中N表示队伍的个数,M表示接着有M行的输入数据。
接下来的M行数据中,每行也有两个整数P1,P2表示即P1队赢了P2队。
给出一个符合要求的排名。输出时队伍号之间有空格,最后一名后面没有空格。
其他说明:符合条件的排名可能不是唯一的,此时要求输出时编号小的队伍在前;输入数据保证是正确的,即输入数据确保一定能有一个符合要求的排名。
Sample Input
Sample Output
算法分析:
本题是拓扑排序的典型应用。
由于顶点数量不多,可以采用邻接矩阵来存储图信息,这样算法比较简单,只需要搜索n次,每次把序号最小的入度为0的顶点存储到拓扑序列中就行了。算法思路比较清晰,代码也比较简洁,但时间复杂度和空间复杂度都较高。
另一种方法是采用邻接表存储图信息。由于题目要求输出时编号小的队伍在前,所以在入栈时一定要保证先让序号最小的入度为0的顶点在栈顶,这样根据后进先出的特点,可以把序号最小的顶点存储到拓扑序列中。我采用折半插入排序的方法,把入度为0的顶点按递减序排序,然后对图进行深度优先搜索,能获得正确的拓扑序列。本算法时间复杂度和空间复杂度都很好,但是代码较长。
两种算法都给出代码,大家可以比较一下,并请提出宝贵意见。
算法思想:拓扑排序,折半插入。
数据结构:邻接矩阵,邻接表。
时间复杂度:算法1:O(N^2);其中N为顶点数量;
&&& 算法2:O(N+M);其中N为顶点数量;M为边的数量
空间复杂度:算法1:O(MAXN^2);其中MAXN为最大顶点数量;
算法2:O(MAXN +M);其中MAXN为最大顶点数量;M为边的数量。
Run ID&&& Submit Time&&& Judge Status&&& Pro.ID&&& Exe.Time&&& Exe.Memory&&& Code Len.&&& Language&&& Author
14:09:06&&& Accepted&&& 1285
31MS&&& 1232K&&& 1128 B
C&&& 巧若拙
13:07:33&&& Accepted&&& 1285
15MS&&& 460K&&& 4004 B
C&&& 巧若拙
代码如下:
#include&stdio.h&
#include&stdlib.h&
#define MAXN 502&&&//最大顶点数量
int map[MAXN][MAXN] = {0};
void TopoLogicalSort(int n);
int main()
&&& int i, j, m, n, u,
&&& while(scanf(&%d%d&, &n, &m) != EOF)
&&&&&&&&for (i=0; i&MAXN; i++)
&&&&&&&&&&&&for (j=0; j&MAXN; j++)
&&&&&&&&&&&&&&& map[i][j] = 0;
&&&&&&&&for (i=0; i&m; i++)&&&&&&&&
&&&&&&&&&&&&scanf(&%d%d&, &u, &v);
&&&&&&&&&&&&if (map[u][v] == 0)&&& //数据可能会重复
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& map[u][v] = 1;
&&&&&&&&&&&&&&& map[0][v]++; //存储顶点v的入度
&&&&&&&&&&&&}
&&&&&&&&TopoLogicalSort(n);
&&& return 0;
void TopoLogicalSort(int n)
&&& int i, j,
&&& int topo[MAXN] = {0};
&&& for (top=0; top&n; top++)//总共有n个顶点,搜索n次
&&&&&&&&for (i=1; i&=n; i++)//寻找入度为0的序号最小的顶点
&&&&&&&&&&&&if (map[0][i] == 0)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& map[0][i] = -1;
&&&&&&&&&&&&&&&
&&&&&&&&&&&&}
&&&&&&&&topo[top] =
&&&&&&&&for (j=1; j&=n; j++) //弧尾i对应弧头j入度减1
&&&&&&&&&&&&if (map[i][j] == 1)
&&&&&&&&&&&&&&& map[0][j]--;
&&& for (i=0; i&top-1; i++)
&&&&&&&&printf(&%d &, topo[i]);
&&& printf(&%d\n&, topo[top-1]);
#include&stdio.h&
#include&stdlib.h&
#define MAXN 510&&&//最大变量(顶点)数量
typedef int VertexT //顶点类型由用户自定义
typedef int EdgeT //边上的权值类型由用户自定义
typedef struct EdgeNode{ //边表结点
&&&&&//邻接点域,存储该顶点对应的下标
//&&& EdgeT //权值,对于非网图可以不需要
&&& struct EdgeNode * //链域,指向下一个邻接点
typedef struct VertexNode{ //顶点表结点
&&& VertexT //顶点域,存储顶点信息
&&&&&&//存储顶点入度的数量
&&& EdgeNode *firstE //边表头指针
void CreateGraph(VertexNode *GL, int n, int m);//把顶点和边信息读入到表示图的邻接表中
int InsertStack(int vec[], int x, int n);//折半插入,递减排序
void TopoLogicalSort_DFS(VertexNode *GL, int n);
int main()
&&& int i, m,
&&& VertexNode GL[MAXN];
&&& while(scanf(&%d%d&, &n, &m) != EOF)
&&&&&&&&CreateGraph(GL, n, m);//把顶点和边信息读入到表示图的邻接表中
&&&&&&&&TopoLogicalSort_DFS(GL, n);
&&& return 0;
void CreateGraph(VertexNode *GL, int n, int m)//把顶点和边信息读入到表示图的邻接表中
&&& int i, u,
&&& EdgeNode *e;
&&& for (i=1; i&=n; i++)//初始化图
&&&&&&&&GL[i].data =
&&&&&&&&GL[i].in = 0;
&&&&&&&&GL[i].firstEdge = NULL;
&&& for (i=0; i&m; i++)
&&&&&&&&e = (EdgeNode*)malloc(sizeof(EdgeNode)); //采用头插法插入边表结点
&&&&&&&&if (!e)
&&&&&&&&&&&&puts(&Error&);
&&&&&&&&&&&&exit(1);
&&&&&&&&scanf(&%d%d&, &u, &v);
&&&&&&&&e-&next = GL[u].firstE
&&&&&&&&GL[u].firstEdge =
&&&&&&&&e-&adjvex =
&&&&&&&&GL[v].in++;
int InsertStack(int vec[], int x, int n)//折半插入,递减排序
&&& int low = 0, high = n - 1, mid,
&&& while(low &= high) //折半查找插入位置
&&&&&&&&mid = (low + high)/2;
&&&&&&&&if(vec[mid] & x)
&&&&&&&&&&&&high = mid -1;
&&&&&&&&else
&&&&&&&&&&&&low = mid + 1;
&&& //进行插入操作
&&& for(j=++n; j& j--)
&&&&&&&&vec[j] = vec[j-1];
&&& vec[low] =
void TopoLogicalSort_DFS(VertexNode *GL, int n)
&&& int i, u, v, top = 0;
&&& int count = 0;
&&& EdgeNode *e;
&&& int topo[MAXN], Stack[MAXN];//有序栈(或优先队列)
&&& for (i=1; i&=n; i++)//将入度为0的顶点按序号大小逆序入栈
&&&&&&&&if (GL[i].in == 0)
&&&&&&&&&&&& top = InsertStack(Stack, i, top);
&&& while (top & 0)//采用深度优先搜索获取拓扑序列
&&&&&&&&u = Stack[--top];
&&&&&&&&topo[count++] =
&&&&&&&&for (e=GL[u].firstE e!=NULL; e=e-&next)//将u的邻接点入度减1,并将入度为0的顶点入栈
&&&&&&&&&&&&v = e-&
&&&&&&&&&&&&if (--GL[v].in == 0)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& top = InsertStack(Stack, v, top);
&&&&&&&&&&&&}
&&& for (i=0; i&count-1; i++)
&&&&&&&&printf(&%d &, topo[i]);
&&& printf(&%d\n&, topo[count-1]);
搜索更多相关主题的帖子:
&&&&&&&&&&
等 级:贵宾
威 望:96
帖 子:3150
专家分:12172
交流下编码心得由于问题规模不大,所以也没进行优化。
程序代码:#include &stdio.h&
int main()
&&& char a[<font color=#][<font color=#];
&&& int b[<font color=#], n, m, i, j,
&&& for(; scanf(&%d%d&, &n, &m) != EOF; puts(&&))
&&&&&&&&for(i = <font color=#; i &= b[i++] = <font color=#)
&&&&&&&&for(j = <font color=#; j &= a[i][j++] = <font color=#);
&&&&&&&&for(i = <font color=#; i++ & scanf(&%d%d&, &j, &k), b[k] += a[j][k] ? <font color=# : (a[j][k] = <font color=#));
&&&&&&&&for(i = <font color=#; i & printf(i++ ? & %d& : &%d&, j))
&&&&&&&&&&&&for(j = <font color=#; j &= n && b[j]; j++);
&&&&&&&&&&&&for(b[j] = -<font color=#, k = <font color=#; ++k &= b[k] -= a[j][k]);
&&& return <font color=#;
重剑无锋,大巧不工
来 自:宁波余姚
等 级:业余侠客
帖 子:159
专家分:273
beyondyf真是太牛了!你的算法思想和我的算法1是一样的,但代码却比我要短很多。我尝试着解读了一下,并斗胆把puts(&&)改成了printf(&\n&),顺便问一句,你为什么要用puts(&&)?是不是他的效率更高?
我是刚学算法,还只会照猫画虎,很多算法思想用的不是很熟练,还请多多指导,谢谢!
#include&stdio.h&
#include&stdlib.h&
int main()
&&& char a[512][512];
&&& int b[512], n, m, i, j,
&&& for (; scanf(&%d%d&, &n, &m) != EOF; printf(&\n&))
&&&&&&&&for (i = 1; i &= b[i++] = 0)//邻接矩阵初始化
&&&&&&&&&&&&for (j = 1; j &= a[i][j++] = 0) ;
&&&&&&&&&&&&
&&&&&&&&for (i = 0; i++ & scanf(&%d%d&, &j, &k), b[k] += a[j][k] ? 0 : (a[j][k] = 1)) ; //输入图信息
&&&&&&&&for (i = 0; i & printf(i++ ? & %d& : &%d&, j))//很巧妙的输出格式啊,嘻嘻#^_^#
&&&&&&&&&&&&for (j = 1; j &= n && b[j]; j++) ;//按序号大小寻找入度为0的顶点j
&&&&&&&&&&&&for (b[j] = -1, k = 0; ++k &= b[k] -= a[j][k]) ;//弧尾j对应弧头k入度减1
&&& return 0;
等 级:贵宾
威 望:96
帖 子:3150
专家分:12172
过奖了。用puts(&&)只为少打几个字符看着清爽,效率上略好(不需要解析格式字符串),但这可以忽略。用你习惯的用法就好。
看你常发算法心得,但就是帖子里不带分。好容易这次有3分,一定要抢来。
重剑无锋,大巧不工
来 自:宁波余姚
等 级:业余侠客
帖 子:159
专家分:273
嘻嘻#^_^#,我刚来论坛,分数不多,不知道怎么用,下次多发点
等 级:贵宾
威 望:96
帖 子:3150
专家分:12172
嘻嘻#^_^#抢分是玩笑话,别介意。其实是你之前的帖子看起来更像是个人笔记,也不知道该回些什么好。写的挺好。
重剑无锋,大巧不工
来 自:宁波余姚
等 级:业余侠客
帖 子:159
专家分:273
我贴的东西确实是学习笔记,比较稚嫩。这是我第一次较为认真地学习数据结构和算法,特地买了好几本书一起看(《大话数据结构》,《啊哈算法》,《数据结构和算法分析--C语言描述》,还有《算法导论》,但里面的数学证明有些看不懂,跳过了),相互比较,写的代码并没有照搬书上的,有一点点自己的体会,虽然简单测试能通过,但不敢保证是对的,所以贴出来希望能得到高手的指点。
顺便汇报一下学习进度,前面链表,树什么的感觉学起来挺快的,现在图论了,有些吃力,看来还得耗上一段时间,我在网上做一些OJ题目,也是为了熟练运用算法,但感觉做起来有些吃力,而且代码都很臃肿什么的,嘻嘻#^_^#。请您提出宝贵意见。
版权所有,并保留所有权利。
Powered by , Processed in 0.024188 second(s), 9 queries.
Copyright&, BCCN.NET, All Rights Reserved问题已关闭
代为完成的个人任务
提问需要满足:其他人可能遇到相似问题,或问题的解决方法对其他人有所助益。如果通过其他方式解决遇到困难,欢迎提问并说明你的求知过程。
int a[5] = {1,2,3,4,5};
int *str = (int *)(&a+1);
printf("%d\n%d\n", *(a+1), *(str-1));
输出结果为2和5,为什么后面的是5?
说点题外话看到这么多人肯来回答初学者的问题。我这个菜鸟好感动啊。这个题目我们培训老师问过我们。当时我就懵逼了。我问我一个同学他说如果没有对指针的深刻理解是跟我说不同的。(我对指针的理解很差)看了这个题目下的回答后我算是有点想的明白这个题目了。一开始看到这个题目还以为会有人嘲讽你不会去问老师啊诸如此类的。
虽然问的是C语言,不过你可以使用以下代码在VC++里面得到解答(不推荐g++是因为输出的字符串不人性化):&br&&div class=&highlight&&&pre&&code class=&language-cpp&&&span class=&cp&&#include &iostream&&/span&
&span class=&cp&&#include &string&&/span&
&span class=&cp&&#include &typeinfo&&/span&
&span class=&k&&using&/span& &span class=&k&&namespace&/span& &span class=&n&&std&/span&&span class=&p&&;&/span&
&span class=&kt&&int&/span& &span class=&nf&&main&/span&&span class=&p&&()&/span&
&span class=&p&&{&/span&
&span class=&kt&&int&/span& &span class=&n&&a&/span&&span class=&p&&[&/span&&span class=&mi&&5&/span&&span class=&p&&];&/span&
&span class=&n&&cout&/span& &span class=&o&&&&&/span& &span class=&k&&typeid&/span&&span class=&p&&(&/span&&span class=&n&&a&/span&&span class=&p&&).&/span&&span class=&n&&name&/span&&span class=&p&&()&/span& &span class=&o&&&&&/span& &span class=&n&&endl&/span&&span class=&p&&;&/span&
&span class=&n&&cout&/span& &span class=&o&&&&&/span& &span class=&k&&typeid&/span&&span class=&p&&(&/span&&span class=&n&&a&/span&&span class=&o&&+&/span&&span class=&mi&&1&/span&&span class=&p&&).&/span&&span class=&n&&name&/span&&span class=&p&&()&/span& &span class=&o&&&&&/span& &span class=&n&&endl&/span&&span class=&p&&;&/span&
&span class=&n&&cout&/span& &span class=&o&&&&&/span& &span class=&k&&typeid&/span&&span class=&p&&(&/span&&span class=&o&&&&/span&&span class=&n&&a&/span&&span class=&p&&).&/span&&span class=&n&&name&/span&&span class=&p&&()&/span& &span class=&o&&&&&/span& &span class=&n&&endl&/span&&span class=&p&&;&/span&
&span class=&k&&return&/span& &span class=&mi&&0&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&br&&img src=&/3ae3adbcf2d8_b.jpg& data-rawheight=&147& data-rawwidth=&339& class=&content_image& width=&339&&
虽然问的是C语言,不过你可以使用以下代码在VC++里面得到解答(不推荐g++是因为输出的字符串不人性化):#include &iostream&
#include &string&
#include &typeinfo&
int main()
cout && typeid(a).name() &&

我要回帖

更多关于 c语言求解线性方程组 的文章

 

随机推荐