当前位置:首页 » 编程软件 » 编程竞赛题

编程竞赛题

发布时间: 2025-06-21 06:42:19

1. 求程序设计大赛题目

一、行棋游戏:
这是一种只有一个棋子的游戏。棋盘被分为N行,M列的方格,某个位置被标记为终点T。在任何一个位置,棋子可以向左、右、上、下四个方向移动一格,记移动距离为1。
在棋盘上有一些特殊方格——飞行器,每个飞行器有一个飞行距离d,棋子达到后可以继续在同方向再“飞”d格,且移动距离仍然为1。例如,如果棋子在位置(2,8),飞行器在位置(2,7),且飞行距离为5,那么棋子向左走一格,将直接到达位置(2,2)且移动距离为1。如果飞行点落在棋盘外,则只能停在边界上。例如,假若前个飞行器的飞行距离为10,那么棋子的最终位置是(2,1)。
而且,如果飞行后的落点仍然是飞行器,则将连续飞行到目的地,且中间点不对当前棋子产生影响,当然也不算任何移动距离。例如,如果棋子位置在(2,8),飞行器在(2,7)、(2,5),且飞行距离都是5,此时棋子向左移动一格,则(2,5)的飞行器将不产生作用,移动距离仍然为1。
你的任务就是,编程计算出棋子达到终点的最短移动距离。
输入:
输入可以有多个测试用例。每个测试用例的第一行是两个整数N、M(3<=N, M<=100),表示棋盘的行列数。随后是一个整数K,表示飞行器的个数。接着的K行每行有3个正整数x、y、d,分别表示飞行器的位置(x,y)(2 <= x <= N-1, 2 <= y <= M-1)及飞行距离d。最后的两行第一行是棋子的初始位置S,第二行是终点位置T。你可以假设数据总是合法的,S与T、飞行器位置互不相同。输入0 0时表示结束
输出:
每个测试用例输出一行,即达到终点的最短距离。如果不能达到,则输出“Impossible”。

二、最少钱币数:
(这个问题的输入我感觉特别麻烦,希望给出比较好的输入方法)
这是一个古老而又经典的问题。用给定的几种钱币凑成某个钱数,一般而言有多种方式。例如:给定了6种钱币面值为2、5、10、20、50、100,用来凑15元,可以用5个2元、1个5元,或者3个5元,或者1个5元、1个10元,等等。显然,最少需要2个钱币才能凑成15元。
你的任务就是,给定若干个互不相同的钱币面值,编程计算,最少需要多少个钱币才能凑成某个给出的钱数。
输入:
输入可以有多个测试用例。每个测试用例的第一行是待凑的钱数值M(1 <= M <= 2000,整数),接着的一行中,第一个整数K(1 <= K <= 10)表示币种个数,随后是K个互不相同的钱币面值Ki(1 <= Ki <= 1000)。输入M=0时结束。
输出:
每个测试用例输出一行,即凑成钱数值M最少需要的钱币个数。如果凑钱失败,输出“Impossible”。你可以假设,每种待凑钱币的数量是无限多的。
样例输入:
15
6 2 5 10 20 50 100
1
1 2
0
样例输出:
2
Impossible 最佳答案第一题,典型的BFS找最短路

#include <iostream>
#define MAXN 105
using namespace std;
const int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int m,n;
int map[MAXN][MAXN];
int head,tail;
int queue[MAXN*MAXN][3];
bool hash[MAXN][MAXN];
int tx,ty;

int main()
{
while (cin>>n>>m && n>0)
{
int i,j,k;
memset(map,0,sizeof(map));
cin>>k;
while (k--)
{
cin>>i>>j;
i--;
j--;
cin>>map[i][j];
}
memset(hash,true,sizeof(hash));
cin>>queue[0][0]>>queue[0][1];
queue[0][0]--;
queue[0][1]--;
queue[0][2]=0;
hash[queue[0][0]][queue[0][1]]=false;
head=0;
tail=1;
cin>>tx>>ty;
tx--;
ty--;
while (head<tail && hash[tx][ty])
{
for (k=0;k<4;k++)
{
i=queue[head][0]+dir[k][0];
j=queue[head][1]+dir[k][1];
while (i>=0 && i<n && j>=0 && j<m && map[i][j]>0)
{
i+=map[i][j]*dir[k][0];
j+=map[i][j]*dir[k][1];
if (i<0 || i>=n || j<0 || j>=m)
{
if (i<0) i=0;
if (i>=n) i=n-1;
if (j<0) j=0;
if (j>=m) j=m-1;
break;
}
}
if (i>=0 && i<n && j>=0 && j<m)
if (hash[i][j])
{
queue[tail][0]=i;
queue[tail][1]=j;
queue[tail][2]=queue[head][2]+1;
hash[i][j]=false;
if (i==tx && j==ty) cout<<queue[tail][2]<<endl;
tail++;
}
}
head++;
}
if (hash[tx][ty]) cout<<"impossible"<<endl;
}
return 0;
}

第二题是典型的DP
用f[i][j]表示用前i种币值凑出总额为j的钱所需的最少钱币个数
状态转移方程f[i][j]=min{f[i-1][j](i>0时),f[i][j-Ki]+1(j>=Ki时),无穷大};

#include <iostream>
#define MAXM 2010
#definme MAXK 15
using namespace std;
int m,k;
int K[MAXK];
int f[MAXK][MAXM];
int main()
{
while (cin>>m && m>0)
{
int i,j;
cin>>k;
for (i=1;i<=k;i++) cin>>K[i];
memset(f,-1,sizeof(f));
f[0][0]=0;
for (i=1;i<=k;i++)
for (j=0;j<=m;j++)
{
int min;
min=-1;
if (f[i-1][j]!=-1 && (min==-1 || f[i-1][j]<min)) min=f[i-1][j];
if (j>=K[i] && f[i][j-K[i]]!=-1 && (min==-1 || f[i][j-K[i]]+1<min)) min=f[i][j-K[i]]+1;
f[i][j]=min;
}
if (f[k][m]==-1) cout<<"impossible"<<endl;
else cout<<f[k][m]<<endl;
}
return 0;
}

2. 试题题目(编程要求): c语言

第五届全国ITAT教育工程就业技能大赛复赛试题 C语言程序设计B卷

请考生仔细阅读并严格遵守题目中关于文件保存和命名的要求。

请务必按照试卷要求为文件命名。

考生答题完毕后,首先创建以“准考证号”命名的文件夹(形式如:433034683),并将考试结果严格按题目上的命名要求进行命名并直接保存在该文件夹下。

注意:考生不得在该文件夹下创建任何子文件夹,所有考试结果均直接保存在该文件夹根目录下。

然后选中整个文件夹,用Winrar压缩工具打包后存放在本考场指定的考试结果存放地址,经监考老师确认上传无误后方可离开考场。

注意:在提交答案时,请务必选中上述存放作品的文件夹(如前面创建的433034683文件夹,而不是文件夹下的全部文件)进行压缩,在完成答案提交后,请确保上述压缩包仍保存在本地计算机中。

请务必按照试卷要求提交指定的文件,不得包含非题目要求的过程文件和临时文件,不得包含本试题文件和试题素材。

注意:凡违反上述规定的考生,其成绩一律按零分处理。

题目命名要求:请将编写好的源程序以题号命名,例如第1题的源程序保存为“1.C” )。

重要提示:由于时间有限,请考生首先保证编写的程序在Wintc环境下可以编译通过并执行,并在此基础上保证完成考题要求的全部功能,以免因编译不通过影响考生的考试成绩。

1、 编程解决如下问题:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡, 问鸡翁,鸡母,鸡雏各几何?(20分)

2、 编程实现:有二维数组a[3][3]=,,},将数组a的每一行元素均除以该行上绝对值最大的元素,按行输出新数组。(20分)

3、 编程:设x、y取值为区间[1,10]的整数, f(x,y)=(3x-2y)/(x+y),求使f(x,y)取最小值的x1、y1,要求使用自定义函数实现f(x,y)功能。(20分)

4、 编写函数fun,其功能是:在字符串中所有数字字符前加一个“*”字符,要求通过指针实现。(20分)

5、 编程:已知学生记录由学号和学习成绩构成,N名学生的记录已存入结构体数组中,找出成绩最低的学生,并输出这个学生的信息,已知学生信息如下。(20分)

A01,81;A02,89;A03,66;A04,87;A05,77

A06,90;A07,79;A08,61;A09,80;A10,71

6、 附加题:编写一个函数InverseByWord(char *sentence),实现一个英文句子按单词逆序存放的功能,并给出测试程序。(50分)

如:This is an interesting programme.

逆序后变为:.programme interesting an is This

第五届全国ITAT教育工程就业技能大赛复赛试题
C语言程序设计(A卷)

请考生仔细阅读并严格遵守题目中关于文件保存和命名的要求。请务必按照试卷要求为文件命名。 考生答题完毕后,首先创建以“准考证号”命名的文件夹(形式如:433034683),并将考试结果严格按题目上的命名要求进行命名并直接保存在该文件夹下。

注意:考生不得在该文件夹下创建任何子文件夹,所有考试结果均直接保存在该文件夹根目录下。

然后选中整个文件夹,用Winrar压缩工具打包后存放在本考场指定的考试结果存放地址,经监考老师确认上传无误后方可离开考场。

注意:在提交答案简世时,请务必选中上述存放作品的文件夹(如前面创建的433034683文件夹,而不是文件夹下的全部文件)进行压缩,在完成答案提交后,请确保上述压缩包仍保存在本地计算机中。

请务必按照试卷要求提交指定的文件,不得包含非题目要弯橘求的过程文件和临时文件,不得包含本试题文件和试题素材。

注意:凡违反上述规定的考生,其成绩一律按零分处理。

题目命名要求:请将编写好的源程序以题号命名,例如第1题的源程序保存为“1.C” 。

重要提示:由于时间有限,请考生首先保证编写的程序在Wintc环境下可以编译通过并执行,并在此基础上完成考题要求的全部功能,以免因编译不通过影响考生的考试成绩。

1、编程解决如下数学问题:有12升水,怎样利用一个8升和一个5升的容器将水分为两个6升?要求以如下格式打印出分水步骤。(20分埋咐团)

a12 b8 c5

12 0 0

* * * ( “*”表示当前状态下每个容器的盛水量)

......

0 6 6

2、编程实现:有二维数组a[3][3]=,,},将数组a的每一行元素均除以该行上的主对角元素(第1行同除以a[0][0],第2行同除以a[1][1],...),按行输出新数组。(20分)

3、编程:设x取值为区间[1,20]的整数,求函数f(x)=x-sin(x)- cos(x)的最大值,要求使用自定义函数实现f(x)功能。(20分)

4、编写函数fun,通过指针实现将一个字符串反向。要求主函数输入字符串,通过调用函数fun实现输入字符串反向。(20分)

5、已知学生三门课程基本信息如下。请使用结构体编程,计算学生三门课程平均成绩后,列表输出学生的姓名、数学、英语、计算机、平均分信息,并按平均分排序。(20分)

姓名 数学 英语 计算机

Mary 93 100 88

Jone 82 90 90

Peter 91 76 71

Rose 100 80 92

6、附加题:编程实现输入一串英文,统计其中各单词出现的个数(不区分大小写字母),以“000”作为字符串输入结束标志,例如:

Twinkle twinkle little star 000(回车)

twinkle little star

2 1 1 (50分)

3. 大一,差不多学完c语言了,网上哪里有c语言的编程题目我就是想多做做题,提高能力,谢谢大家了

就那点c语言的基础,最多也就是在scanf,printf
如果想真正学学编程
你应该想想,为什么c语言编程是黑色的框框, 比如像qq之类的是怎么编写的,,然后再去写写游戏,到后面写点简单的软件
如果一味的光练习那种东西,也没多大用

4. 编程题:某同学有三名同学参加数学竞赛,共10道题,答对一道得10分,答错一道

解:
小明:设小明答对了x道题,则答错了(10-x)道题
10x-3(10-x)=87
10x-(30-3x)=87
10x-30+3x=87
10x+3x=87+30
13x=117
x=9
王红:设王红答对y道题,则答错(10-y)道题
10y-3(10-y)=74
10y-(30-3y)=74
10y-30+3y=74
10y+3y=74+30
13y=104
y=8

张凯:设张凯答对a道题,则打错了(10-a)道题
10a-3(10-a)=48
10a-(30-3a)=48
10a-30+3a=48
10a+3a=48+30
13a=78
a=6 答:小明答对了9道,王红答对了8道,张凯答对了6道。

5. C语言 编程题目 程序设计题目 高中信息科技竞赛编程题目 【100分】

【第一道】
#include <iostream>
using namespace std;
#define pi 3.14159265
double maxvolume(double a,double b)
{
double v1,v2,r;
r=b/(2*pi+2);
v1=pi*r*r*a;
r=a/(2*pi+2);
v2=pi*r*r*b;
if(v1>v2)
return v1;
else
return v2;
}
int main()
{
double a,b;
cout<<"请输入矩形的长宽:";
cin>>a;
cin>>b;
cout<<"最大圆柱体积:"<<maxvolume(a,b)<<endl;
return 0;
}

【第二道】
//事实上,涂色方案不止样例上的一种,我把所有的可行方案都输出了一下
#include <iostream>
using namespace std;
int data[][8]={ {0},
{0,0,1,0,0,0,1,1},
{0,1,0,1,1,1,1,0},
{0,0,1,0,1,0,0,0},
{0,0,1,1,0,1,0,0},
{0,0,1,0,1,0,1,0},
{0,1,1,0,0,1,0,1},
{0,1,0,0,0,0,1,0}
};
int total;
int color[8];
char COLOR[5]={' ','R','Y','B','W'};
void output()
{
total++;
cout<<"["<<total<<"]\t";
for(int i=1;i<=7;i++)
{
cout.width(2);
cout<<COLOR[color[i]];
}
cout<<endl;
}
bool checkcolor(int s)
{
for(int i=1;i<=7;i++)
{
if(data[i][s]==1&&color[i]==color[s])
return false;
}
return true;
}
void drawcolor(int s)
{
if(s>7)
output();
else
for(int i=1;i<=4;i++)
{
color[s]=i;
if(checkcolor(s))
drawcolor(s+1);
}
}
int main()
{
cout<<" \t";
for(int i=1;i<=7;i++)
{
cout.width(2);
cout<<i;
}
cout<<endl;
drawcolor(1);
cout<<endl<<" \t涂色方案总数:"<<total<<endl<<endl;
return 0;
}

6. 编号为1到100的100盏灯

这是一个经典的智力题,常常出现在编程竞赛或数学竞赛中。

问题描述:有100盏灯,编号为1到100。有100位选手进入了房间,每位选手都从1开始依次进行编号。然后,按顺序每10位选手同时关掉所有编号是质数的灯。

问题:最后哪些灯会亮着?

答案解析:选手编号为i,则i的质数因子个数为k,那么i+k就是i的唯一质数因子。如果i+k≤10,那么第i+k号灯将被关掉;否则第i+k号灯将会被留下。

2、要善于寻找和运用规律

智力题中常常涉及到各种规律和逻辑关系,我们需要通过仔细的观察和分析,找到这些规律和逻辑关系。有时候这些规律和逻辑关系并不明显,需要我们深入思考和推理。一旦找到这些规律和逻辑关系,我们就可以运用它们来解决问题。

3、要注意细节和特殊情况

在解答智力题时,细节往往是非常关键的。有时候一个细节的忽略会导致整个问题的解答失败。因此,我们要特别注意题目中的细节,例如一些限制条件、特殊情况等等。此外,我们还需要考虑一些边界情况和异常情况,确保我们的解答是完整和正确的。

热点内容
android搭建开发环境搭建 发布:2025-06-21 09:34:12 浏览:963
eclipse编译源码 发布:2025-06-21 09:20:08 浏览:436
ide编程 发布:2025-06-21 09:16:52 浏览:427
编程的大师 发布:2025-06-21 09:16:44 浏览:505
茶园密码锁哪里可以修 发布:2025-06-21 09:14:31 浏览:448
文明重启国服怎么自己创造服务器 发布:2025-06-21 09:00:14 浏览:437
为什么java可以跨平台 发布:2025-06-21 08:52:08 浏览:731
我的世界服务器蹲神兽 发布:2025-06-21 08:50:05 浏览:848
路由器密码怎么改手机 发布:2025-06-21 08:50:01 浏览:658
瓶罐压缩机 发布:2025-06-21 08:47:54 浏览:694