当前位置:首页 » 编程语言 » c语言竞赛题

c语言竞赛题

发布时间: 2022-04-29 03:50:19

A. 华南农业大学新生c语言竞赛题--韩信点兵

#include"stdio.h"
#include"math.h"
main()
{
int
a,b,c,d,e,f,g,h,A,B,C,D,E,F,G,H;
long
i,sum=0;
scanf("%d
%d
%d
%d
%d
%d
%d
%d",&A,&B,&C,&D,&E,&F,&G,&H);
scanf("%d
%d
%d
%d
%d
%d
%d
%d",&a,&b,&c,&d,&e,&f,&g,&h);
for(i=2;i<pow(2,63);i++)
{
if(i%A==a&&i%B==b&&i%C==c&&i%D==d&&i%E==e&&i%F==f&&i%G==g&&i%H==h)
{
sum=i;
break;
}
}
printf("%ld",sum);
}
师弟啊,你们好幸运啊,我们去年来华农的时候,没可没有这么好的机会有这些竞赛哦,希望你好好把握!
其实这些体都不是很难,只是你们以前没接触过C语言而一时适应不了吧……其实每个初学C语言的人都认为好像有学了,但是好像不懂,其实你慢慢会懂得,你一直在进步,只是没感觉出来而已……
我建议你如果真的想学好C语言,要多多上机。学校不个带电脑不是借口,东区实验楼三楼的机子在星期一至星期五都是免费开放的,给你们上机做实验足够了哦,希望你们好好珍惜……
呵呵,可能说太多了吧,最后跟你说一下我自己,我是信息学院的,06级,QQ115881379,有什么问题可以找我!

B. 比较好的大学生C语言竞赛编程题 或者比较有档次的竞赛有哪些(本科、研究生可以参加的)

1:C语言竞赛编程题很多,你可以去北大的ACM网上测评系统JudgeOnline上做题,它能检查你的代码是否正确。
网址:http://acm.pku.e.cn/JudgeOnline/
可以注册一个账号,它会保存你每次提交正确的代码,上面的题比较多,范围广,各种难度试题都有。当然还有其他大学的一些JudgeOnline,如上海交大的。

2:有档次的竞赛首推ACM/ICPC(国际大学生程序设计竞赛),当然也有全国大学生程序设计大赛。每年有的网站和机构也会举办编程竞赛,如这几年网络举办的网络之星程序设计大赛也很有影响力。在给出的样题第一例有对ACM的详细介绍,样题是我们学校某届程序大赛初试题,比较简单。(此外ACM程序大赛也可以用C++编程,本科生、研一可参加)

3:一些简单的ACM样题(因为是国际性比赛,ACM试题都是E文的,下面部分是翻译过来的)

H-acm规则
Description
ACM/ICPC(国际大学生程序设计竞赛)是由ACM(Association for Computing Machinery,美国计算机协会)组织的年度性竞赛,始于1976年,是全球大学生计算机程序能力竞赛活动中最有影响的一项赛事,是全世界公认的规模最大、规格最高的大学生程序设计竞赛,是参赛选手展示计算机才华的广阔舞台,是着名大学计算机教育成果的直接体现,是信息企业与世界顶尖计算机人才对话的最好机会。ACM/ICPC采用赛区选拔的方式产生参加世界决赛学校的资格,2001年,来自全球超过25个地区1141所大学的2362支队伍参加了第26届ACM/ICPC的赛区竞赛。在2002年3月,来自世界各地的约60支队伍,200多名选手参加了夏威夷总决赛的角逐。
在 ACM/ICPC 比赛中,均使用自动判题系统,这不仅减轻了ACM/ICPC比赛的举办方的负担,同时也使竞争更加的公正公平。 因为在比赛中,比赛成员就可以看到自己排名情况,这使的比赛更加的透明。
ACM/ICPC 比赛中排名是按如下方法排名的:
1: 解题数目最多的队伍排在前面。
2: 如果解题数目相等的队伍,总用时最少的排在前面。
注: 在比赛中,每道试题用时将从竞赛开始到试题解答被判定为正确为止,期间每一次错误的运行将被加罚20分钟时间,未正确解答的试题不计时。 那么所有解答出来题目的用时和罚时加起来为:该队伍所花的总用时。
现在,需要你写一个程序来给比赛队伍进行排名(假设不超过200支队伍)。
Input
多行测试数据,每行包含各个队伍的比赛信息。
每个队伍格比赛信息表示格式为:
string n m 分别表示队名、解题数量、总用时(其中:队名为长度不超过30的字符串,解题数量为1…10之间的整数,罚时的范围不超过int的范围)
当输入end时,表示输入结束。
Output
按先后名次输出各个队伍的比赛信息。
每个比赛队伍占一行。
每行格式为:
string n m 分别代表 队名 解题数量 总用时。
Example Input
amstl 3 65
danoniao 2 50
lutedan 3 60
end
Example Output
lutedan 3 60
amstl 3 65
danoniao 2 50

G-我想我需要一只船屋
Description
佛瑞德最近正在考虑在路易斯安那洲买一片土地来盖一栋房子.在进行调查研究土地的过程中佛瑞德发现,路易斯安那洲的土地由于密西西比河的侵蚀会以每年50平方英里的速度缩减.佛瑞德计划后半生都在该地度过,所以他不希望在自己的有生之年房屋受到河水的侵蚀.现在他需要知道自己是否会受到河水的侵蚀.
在做了更多的调查之后,佛瑞德得知这里的土地沿河岸以半圆形方式侵蚀,这个半圆以(0,0)为圆心的,被X轴分成上下两部分,位于X轴下边的是河水,上面是河岸.在第一年开始的时候这个半圆范围为0,也就是说河岸未被河水侵蚀.(半圆如下图所示)

Input
第一行的一个正整数N指出下边有多少组数据需要计算.下边N行,每行包含两个实数X和Y,指出佛瑞德考虑的房子以(0,0)为原点的坐标系内的位置.以英里为单位.Y为非负数.
Output
计算在X,Y位置佛瑞德的房子在第几年会被河水侵蚀.与输入数据相对应每行以如下形式输出你的计算结果:“Property N: This property will begin eroding in year Z.”, 其中N为第N组数据,Z为你计算出的开始侵蚀的年数.在最后输出一句“END OF OUTPUT.”,表示计算结束.
Example Input
2
1.0 1.0
25.0 0.0
Example Output
Property 1: This property will begin eroding in year 1.
Property 2: This property will begin eroding in year 20.
END OF OUTPUT.
Hint
• 房屋的位置不会正好在半圆边界上,要不在内,要不在外。
• 你所提交的程序计算输出会由系统自动判断。你的结果要和输出要求精确匹配,字母大小写、标点符号和空格 。包括最后一行的语句也要精确匹配。
• 所有给定数据都以英里为单位。

F-N!的计算
Description
N!=N×(N-1)×(N-2)×(N-3)×....
Input
输入第一行为一正整数m,表示下边要计算几个 N!
下一行开始为m个正整数( 1 ≤ N ≤ 11 , m ≤ 9)
Output
输出这m个正整数的阶乘结果,每个一行.
Example Input
3
1
2
5
Example Output
1
2
120

I-Vertical Histogram
Description
Write a program to read four lines of upper case (i.e., all CAPITAL LETTERS) text input (no more than 72 characters per line) from the input file and print a vertical histogram that shows how many times each letter (but not blanks, digits, or punctuation) appears in the all-upper-case input. Format your output exactly as shown.
Input
* Lines 1..4: Four lines of upper case text, no more than 72 characters per line.
Output
* Lines 1..??: Several lines with asterisks and spaces followed by one line with the upper-case alphabet separated by spaces. Do not print unneeded blanks at the end of any line. Do not print any leading blank lines.
Example Input
THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG.
THIS IS AN EXAMPLE TO TEST FOR YOUR
HISTOGRAM PROGRAM.
HELLO!
Example Output
*
*
* *
* * * *
* * * *
* * * * * *
* * * * * * * * * *
* * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

J-白棋胜?还是黑棋胜?
Description
Cinderalla最近迷上了玩五子棋.可是在和其它的小伙伴一起玩时她老是输,于是她想用计算机来帮她判断棋局是那方获胜.为了简便,我们先去掉一些规则.我们认为棋盘上只要有一方的棋有五个棋子相连就确定那一方获胜.你的任务是编写一个程序来判断我们给出的棋局是那一方获胜.
Input
输入数据只有一组.第一行有两个正整数m,n(5 ≤ m,n ≤ 10),分别代表棋盘的行数和列数.紧接着的2*n+1行是棋盘的描述,棋盘由"+","-","|"构成,其中"*"代表白棋,"#"代表黑棋. "+","-","|"的ASCII码分别为43、45、124
Output
输出数据只有一组,如果白棋获胜则输出White Win!,如果黑棋获胜则输出Black Win!
Example Input
5 10
+-+-+-+-+-+-+-+-+-+-+
| |*| | | | | | | | |
+-+-+-+-+-+-+-+-+-+-+
| | |*|#| | | | | | |
+-+-+-+-+-+-+-+-+-+-+
| | |#|*|#|#| | | | |
+-+-+-+-+-+-+-+-+-+-+
| | | | |*|#| | | | |
+-+-+-+-+-+-+-+-+-+-+
| | | | | |*| | | | |
+-+-+-+-+-+-+-+-+-+-+
Example Output
White Win!
Hint
给出的棋局必有一方是获胜的.

C. 华南农业大学新生c语言竞赛题--K尾相等数

解:对于一个数,它的幂是无穷多个的,但是末尾三位数只有1000种。这表明当第一次重复出现大于等于1000的末尾三位数时,这就是我们要求的M和N了.

源代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define LEN 1000

void main(){
int k,i,tail[LEN],m,flag;
while(1){
scanf("%d",&k); //输入K
if(k==1) exit(0); //如果K等于1则退出
flag=0; //初始化
i=m=1; //m为当前幂的次数,i等于k的m次幂
memset(tail,0,sizeof(int)*LEN);
/* 当K大于1000时我们只要对它的末尾三位数进行幂运算,
* 这样不影响结果,但减少了幂运算后值的大小
*/
if(k>=LEN) {
k=k%LEN;
flag=1;
}
while(1){
i*=k;
if(i>=LEN || flag==1){
if(tail[i%LEN]==0) tail[i%LEN]=m; //这个末尾三位数是第一次出现
else {tail[i%LEN]+=m;break;} //末尾三位数出现了第二次,退出循环
flag=1;
}
if(i>=LEN) i=i%LEN;
m++;
}
printf("%d ",tail[i%LEN]);
}
}

D. c语言程序设计大赛试题

我写了个程序,不知道能达到你的要求不?

主要的算法思路是若输入的数不能被11整除,就先用一个数组将输入数的每一位存起来,然后通过交换数组元素的位置达到重新排列数的目的,每次只需交换数组中两个元素的位置即可,交换(即)重新排列后再将数组合,判断能否被11整除,不能则继续循环。

#include<stdio.h>

int main()
{
int num;
printf( "Please input your number:" );
scanf( "%d", &num );
if( num % 11 == 0 )
{
printf( "%d\n", num );
}
else
{
int a[10] = {0};
int ti = 10, i = 0, nable = 0;
while( num / ti != 0 )
{
a[i] = num % ti;
i++;
num = num / ti;
}
a[i] = num;
for(int k = i; k >= 0; k-- )
{
for(int j = 0; j < k; j++)
{
int temp, m = 0;
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
for(int t = 0; t <= i; t++)
m = m * 10 + a[t];
if( m % 11 == 0)
{
printf( "%d\n", m );
nable = 1;
break;
}
}
if(nable == 1)
break;
}
if(nable == 0)
printf("Your number is undivisible!\n");
}
return 0;
}

E. c语言编程题, 求大神帮忙,这可是竞赛题

逆波兰表示的计算器

#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#defineNUMBER'0'
voingetch(charc);
intgetch();
intgetop(char*s);
voidpush(doublenumber);
doublepop();
/*以上为声明说明部分*/
intmain(){
char*s,c;
doubleop_temp;
s=(char*)malloc(100*sizeof(char));
printf("逆波兰表示的计算器 使用方法:输入两个数值再输入运算符号(例如:34+5*(Enter)表示(3+4)*5) ");
printf("按<Esc>可以结束程序 ");
while((c=getop(s))!=EOF)
{
switch(c)
{
caseNUMBER:printf("NUMBER:%s ",s);push(atof(s));break;
case'+':push(pop()+pop());break;
case'-':op_temp=pop();push(pop()-op_temp);break;
case'*':push(pop()*pop());break;
case'/':if((op_temp=pop()))push(pop()/op_temp);break;
case' ':printf("result=%.8g ",pop());break;
case27:exit(0);
default:printf("error,unknown%c ",c);break;
}
}
return0;
}
/*分析文本流部分*/
intgetop(char*s1){
charc;
inti=0;//printf("c:%d ",c=getch());
while((c=getch())==''||c==' ');
*s1=c;
if(!isdigit(c))returnc;//若数字字符则返回字符
while((c=getch())!=EOF&&c!=13)
{
if(isdigit(c)){s1[++i]=c;s1[i+1]='';}
//原主函数只申请了一个指针s且没有分配内存现在却将其当成数组使用,没问题么?个人观点,我也不是很懂
else
{
if(c=='.')
{
s1[++i]=c;
continue;
}
else
{
ungetch(c);
s1[++i]='';
returnNUMBER;
}
}
}
returnc;
}
/*获取字符和回退字符部分*//*对缓存栈中的字符数不加限制*/
intcpointer[100];
/*如果这里改为int*cpointer,计算浮点时就会出错*/
intc_count=0;intgetch(){
return(c_count>0)?cpointer[--c_count]:getchar();
}
voingetch(charc){
cpointer[c_count++]=c;
}
/*进出栈部分*/
double*number_stack=(double*)malloc(100*sizeof(double));
intn_count=0;
voidpush(doublenumber){
number_stack[n_count++]=number;
}
doublepop(){
if(n_count>0)
returnnumber_stack[--n_count];
elseprintf("errorofpop");
return0;
}

F. C语言编程比赛试题

#include <stdio.h>
#include <stdlib.h>
#include<string.h>

int main()
{
int n,i,j;
char p[10000];
while(scanf("%d",&n)!=EOF)
{
getchar();
for(i=0;i<n;i++)
{
gets(p);
putchar(p[0]);
for(j=1;j<strlen(p);j++)
printf(" %c",p[j]);
printf("\n");
}
}
}

G. 华南农业大学新生c语言竞赛题--分珠

这道题其实刚开始看吓人。。。往后一看就乐了,这么小的数据范围,直接搜索就可以。下面是程序

#include <stdio.h>

struct Edge
{
      int x, y;
};

Edge edge[ 10 ];
int n, m, hide[ 10 ][ 10 ], w[ 10 ], Min_c, sum;

void init( )
{
      int i, j, a, b;
      scanf("%d%d", &n, &m);
      sum = 0;
      for ( i = 0; i < n; i++ )
      {
            scanf("%d", &w[ i ]);
            sum += w[ i ];
            for ( j = 0; j < n; j++ )
                  hide[ i ][ j ] = 0;
      }
      for ( i = 0; i < m; i++ )
      {
            scanf("%d%d", &a, &b);
            edge[ i ].x = a - 1;
            edge[ i ].y = b - 1;
            hide[ a - 1 ][ b - 1 ] = 1;
            hide[ b - 1 ][ a - 1 ] = 1;
      }
      Min_c = sum;
}

int check( )
{
      int visit[ 10 ], i, c, t = 0, q[ 10 ], head = 0, tail = 0;
      for ( i = 0; i < n; i++ )
            visit[ i ] = 1;
      visit[ 0 ] = 0;
      q[ 0 ] = 0;
      t = w[ 0 ];
      while ( tail >= head )
      {
            c = q[ head++ ];
            for ( i = 0; i < n; i++ )
                  if ( hide[ c ][ i ] && visit[ i ] )
                  {
                        visit[ i ] = 0;
                        q[ ++tail ] = i;
                        t += w[ i ];
                  }
      }
      if ( tail == n - 1 )
            return 0;
      return t;
}

int mabs( int x )
{
      if ( x < 0 )
            return -x;
      return x;
}

void cut( int step )
{
      int t = check( );
      if ( t && mabs( sum - t * 2 ) < Min_c )
            Min_c = mabs( sum - t * 2 );
      if ( step >= m )
            return ;
      int i, a, b;
      for ( i = step; i < m; i++ )
      {
            a = edge[ i ].x;
            b = edge[ i ].y;
            hide[ a ][ b ] = hide[ b ][ a ] = 0;
            cut( i + 1 );
            hide[ a ][ b ] = hide[ b ][ a ] = 1;
      }
}

void print( )
{
      printf("%d\n", Min_c);
}

int main( )
{
      init( );
      cut( 0 );
      print( );
      return 0;
}

H. C语言题(竞赛排名)

#include<iostream>
usingnamespacestd;
class
{
public:
strings;
intnum;
intgrade;
}maxn;
strings;
intn,s1[5][3]={0};
intmain()
{
cin>>n;
maxn.num=maxn.grade=0;
for(inta=1;a<=n;a++)
{
cin>>s;memset(s1,0,sizeof(s1));
for(intb=1;b<=4;b++)
{
cin>>s1[b][1]>>s1[b][2];
if(s1[b][2]>0)
{
s1[0][1]++;
s1[0][2]+=s1[b][2]+(s1[b][1]-1)*20;
}
}
if(s1[0][1]>maxn.num||s1[0][1]==maxn.num&&s1[0][2]<maxn.grade)
{
maxn.s=s;
maxn.num=s1[0][1];
maxn.grade=s1[0][2];
}
}
cout<<maxn.s<<""<<maxn.num<<""<<maxn.grade;
}

I. 初中C语言经典例题

1、求1+2+3+4+5+......+n
2、求1*2*3*4*5*......*n
3、求菲波拉契数列第n项(菲波拉契数列满足:A1 = 1;A2 = 1;An = An-1 + An-2(n>=3);
4、判断一个数能否分成两个合数的积
5、求两个数的最大公约数;
6、这是高中信息学奥林匹克竞赛2004年的复赛第一题,不过蛮简单的,推介做一下:
津津的储蓄计划
(save.c)

【问题描述】

津津的零花钱一直都是自己管理。每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。
为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上20%还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于100元或恰好100元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。
例如11月初津津手中还有83元,妈妈给了津津300元。津津预计11月的花销是180元,那么她就会在妈妈那里存200元,自己留下183元。到了11月月末,津津手中会剩下3元钱。
津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。如果出现这种情况,津津将不得不在这个月省吃俭用,压缩预算。
现在请你根据2004年1月到12月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到2004年年末,妈妈将津津平常存的钱加上20%还给津津之后,津津手中会有多少钱。

【输入文件】

输入文件save.in包括12行数据,每行包含一个小于350的非负整数,分别表示1月到12月津津的预算。

【输出文件】

输出文件save.out包括一行,这一行只包含一个整数。如果储蓄计划实施过程中出现某个月钱不够用的情况,输出-X,X表示出现这种情况的第一个月;否则输出到2004年年末津津手中会有多少钱。

【样例输入1】

290
230
280
200
300
170
340
50
90
80
200
60

【样例输出1】

-7

【样例输入2】

290
230
280
200
300
170
330
50
90
80
200
60

【样例输出2】

1580

数列基本:
1、找最大数:
找一组数中的最大数;
2、排序:
将N个数从小到大排列;
3、搜索:
在一个数列中找到一个数,并将其删除。

字符串处理相关:
1、解一元一次方程(该方程被直接作为字符串读入):
-x+3x-18-9x+37-9x-1=2x+3-x
综合:
这里也同样给出一道题,尽可能优化程序效率:

合并果子

(fruit.c)

【问题描述】

在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。

每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。

因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力。假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最少,并输出这个最小的体力耗费值。

例如有3种果子,数目依次为1,2,9。可以先将1、2堆合并,新堆数目为3,耗费体力为3。接着,将新堆与原先的第三堆合并,又得到新的堆,数目为12,耗费体力为12。所以多多总共耗费体力=3+12=15。可以证明15为最小的体力耗费值。

【输入文件】

输入文件fruit.in包括两行,第一行是一个整数n(1<=n<=10000),表示果子的种类数。第二行包含n个整数,用空格分隔,第i个整数ai(1<=ai<=20000)是第i种果子的数目。

【输出文件】

输出文件fruit.out包括一行,这一行只包含一个整数,也就是最小的体力耗费值。输入数据保证这个值小于231。

【样例输入】

3
1 2 9

【样例输出】

15

【数据规模】

对于30%的数据,保证有n<=1000:
对于50%的数据,保证有n<=5000;
对于全部的数据,保证有n<=10000。

J. 华南农业大学新生c语言竞赛题--三角形

简单的数学问题

#include <stdio.h>
#include <math.h>

void work( )
{
      int a, i, j;
      scanf("%d", &a);
      for ( i = ( a * a + 1 ) >> 1; i > a; i-- )
      {
            j = int( sqrt( i * i - a * a ) );
            if ( j * j + a * a == i * i && j < i )
                  printf("%d,%d\n", i, j);
      }
      for ( i = a - 1; i > 1; i-- )
      {
            j = int( sqrt( a * a - i * i ) );
            if ( j * j + i * i == a * a && j < i )
                  printf("%d,%d\n", i, j);
      }
}

int main( )
{
      int n, i;
      scanf("%d", &n);
      while ( n-- )
      {
            work( );
            if ( n )
                  printf("\n");
      }
      return 0;
}

热点内容
编程找点 发布:2025-05-15 20:43:10 浏览:587
php上传临时文件夹 发布:2025-05-15 20:43:00 浏览:657
impala数据库 发布:2025-05-15 20:42:12 浏览:649
android安装插件 发布:2025-05-15 20:41:31 浏览:241
神秘顾客访问 发布:2025-05-15 20:33:39 浏览:298
安卓市场手机版从哪里下载 发布:2025-05-15 20:17:28 浏览:815
幼儿速算法 发布:2025-05-15 20:15:08 浏览:87
best把枪密码多少 发布:2025-05-15 20:13:42 浏览:549
android安装程序 发布:2025-05-15 20:13:20 浏览:560
c语言跳出死循环 发布:2025-05-15 20:06:04 浏览:825