當前位置:首頁 » 編程語言 » 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:17:28 瀏覽:813
幼兒速演算法 發布:2025-05-15 20:15:08 瀏覽:86
best把槍密碼多少 發布:2025-05-15 20:13:42 瀏覽:547
android安裝程序 發布:2025-05-15 20:13:20 瀏覽:558
c語言跳出死循環 發布:2025-05-15 20:06:04 瀏覽:823
a19處理器相當於安卓哪個水平 發布:2025-05-15 20:05:29 瀏覽:638
榮耀9i安卓強行關機按哪個鍵 發布:2025-05-15 20:00:32 瀏覽:750
密碼鎖寫什麼最好 發布:2025-05-15 19:05:31 瀏覽:782
5的源碼是 發布:2025-05-15 19:04:07 瀏覽:719
c語言創建的源文件 發布:2025-05-15 18:54:08 瀏覽:611