![算法訓(xùn)練普通試題_第1頁(yè)](http://file4.renrendoc.com/view7/M01/30/34/wKhkGWbLYJSANpd6AAC3kN8vq4s179.jpg)
![算法訓(xùn)練普通試題_第2頁(yè)](http://file4.renrendoc.com/view7/M01/30/34/wKhkGWbLYJSANpd6AAC3kN8vq4s1792.jpg)
![算法訓(xùn)練普通試題_第3頁(yè)](http://file4.renrendoc.com/view7/M01/30/34/wKhkGWbLYJSANpd6AAC3kN8vq4s1793.jpg)
![算法訓(xùn)練普通試題_第4頁(yè)](http://file4.renrendoc.com/view7/M01/30/34/wKhkGWbLYJSANpd6AAC3kN8vq4s1794.jpg)
![算法訓(xùn)練普通試題_第5頁(yè)](http://file4.renrendoc.com/view7/M01/30/34/wKhkGWbLYJSANpd6AAC3kN8vq4s1795.jpg)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
試題編號(hào)ALGO-101
算法訓(xùn)練圖形顯示
問(wèn)題描述
編寫(xiě)一個(gè)程序,首先輸入一個(gè)整數(shù),例如5,然后在屏幕上顯示如下的圖形(5表示行
數(shù)):
*****
****
***
**
本題的C++參考代碼如下:
#include<iostream>
usingnamespacestd;
intmain()
(
intn;
cin?n;
for(inti=0;i<n;i++)
for(intj=I;j<=n-i;j++)
(
cout?"*";
if(j<n-i)
cout?
else
cout?endl;
)
return0;
本題的c參考代碼如下:
#include<stdio.h>
intmain()
{inti,j,allOOJllOOJ,n;
while(scanf("%d,',&n)!=EOF)
{for(i=0;i<n;i++)
for(j=0;j<n-i;j++)
(
printf("*");
if(j!=n-i-l)
printf(”");
if(j==n-l-i)
printf("\n");
)
試題編號(hào)ALGO-97
算法訓(xùn)練排序
問(wèn)題描述
編寫(xiě)一個(gè)程序,輸入3個(gè)整數(shù),然后程序?qū)?duì)這三個(gè)整數(shù)按照從大到小進(jìn)行排列。
輸入格式:輸入只有一行,即三個(gè)整數(shù),中間用空格隔開(kāi)。
輸出格式:輸出只有一行,即排序后的結(jié)果。
輸入輸出樣例
樣例輸入
9230
樣例輸出
3092
本題的C++參考代碼如下:
#include<iostream>
usingnamespacestd;
intmain()
(
inta,b,t,c;
while(cin?a?b?c)
(
if(a<b)
(
t=a;a=b;b=t;
)
if(a<c)
(
t=a;a=c;c=t;
)
if(b<c)
(
t=b;b=c;c=t;
)
cout?a?',?b?,,?c?endl;
return0;
本題的c參考代碼如下:
#include<stdio.h>
#include<stdlib.h>
#definenum100
intmain(void)
(
inti,j,t,a[3]={0};
for(i=0;i<3;i++)
{scanf("%dM,&a[iJ);
)
for(i=0;i<3;i++)
for(j=i;j<3;j++)
if(a[i]<=a[j]){t=a[i];a[i]=a[j];a[j]=t;}
for(i=0;i<3;i++)
{printf("%dn,a[i]);
if(i!=2)printf("'1);
)
printf(M\n");
return0;
試題編號(hào)ALGO-95
算法訓(xùn)練2的次塞表示
問(wèn)題描述
任何一個(gè)正整數(shù)都可以用2進(jìn)制表示,例如:137的2進(jìn)制表示為10001001。
將這種2進(jìn)制表示寫(xiě)成2的次第的和的形式,令次事高的排在前面,可得到如下表達(dá)式:
137=2A7+2A3+2A0
現(xiàn)在約定寒次用括號(hào)來(lái)表示,即Sb表示為a(b)
此時(shí),137可表示為:2(7)+2(3)+2(0)
進(jìn)一步:7=2人2+2+2入0(27用2表示)
3=2+2人0
所以最后137可表示為:2(2(2)+2+2(0))+2(2+2(0))+2(0)
又如:1315=2八10+2八8+2A5+2+1
所以1315最后可表示為:
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
輸入格式
正整數(shù)(l<=n<=20000)
輸出格式
符合約定的n的0,2表示(在表示中不能有空格)
樣例輸入
137
樣例輸出
2(2(2)+2+2(0))+2(2+2(0))+2(0)
樣例輸入
1315
樣例輸出
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
提示
用遞歸實(shí)現(xiàn)會(huì)比較簡(jiǎn)單,可以一邊遞歸一邊輸出
本題的C++參考代碼如下:
#include<iostream>
usingnamespacestd;
〃遞歸實(shí)現(xiàn)思路是先轉(zhuǎn)換成二進(jìn)制
intfun(intn)
inti=0;
inta[20]={0};
intm=n;
while(m)
{
a[i]=m%2;
m/=2;
i++;
)
for(intj=i-l;j>=O;j-)//高位到低位排列但是要注意每位的權(quán)改變
(
if(a|j]=l)
(
〃若是最后一個(gè)1則之后不要加號(hào)
intflag=l;
for(intk=j-l;k>=O;k—)
(
if(a[k]==l)
(
flag=O;
break;
}
)
if(flag)〃是最后一位
(
if(j==l)
cout?H2";
else
(
if(j==O)
coutvv"2(“vvj?")”;
else
(
cout?"2(";
fun(j);
cout?")M;
)
else〃不是最后一位
(
ifg)
cout?',2+M;
else
if)
cout?H2(n?j?n)+u;
else
(
cout?n2(M;
fun(j);
cout?")+";
)
return0;
I
intmain()
(
intn;
cin?n;
fun(n);
cout?endl;
return0;
本題的c參考代碼如下:
#include<stdio.h>
int1=0;
chartemp[1000]={0};
voidshow(intn)
(
if(n==0){temp[l]=,0,;l++;retum;)
if(n==2){temp[l]=,2,,l+4-;return;}
inta[15]={0},i=0,j;
while(n!=0)
(
a[i]=n%2;
n/=2;
i++;
)
for(j=i-l;j>=0;j-)
if(a[j]==l)
if(j==D
(
if(temp[l-l]==')'IItemp[l-l]=='2,){temp[l]='+,;l++;}
temp[l]=,2,;l++;
)
else
(
if(temp[l-l]==')'IItemp[l-l]=='2'){temp[l]='+';l++;}
temp[l]='2,;l++;
temp[l]=,(,;l++;
show(j);
temp[l]=,),;l++;
intmain()
(
intn;
scanf("%d",&n);
show(n);
printf(M%s,temp);
return0;
試題編號(hào)ALGO-92
算法訓(xùn)練前綴表達(dá)式
問(wèn)題描述
編寫(xiě)一個(gè)程序,以字符串方式輸入一個(gè)前綴表達(dá)式,然后計(jì)算它的值。輸入格式為:“運(yùn)
算符對(duì)象1對(duì)象2”,其中,運(yùn)算符為“+”(加法)、(減法)、“*”(乘法)或
“/”(除法),運(yùn)算對(duì)象為不超過(guò)10的整數(shù),它們之間用一個(gè)空格隔開(kāi)。要求:對(duì)于加、
減、乘、除這四種運(yùn)算,分別設(shè)計(jì)相應(yīng)的函數(shù)來(lái)實(shí)現(xiàn)。
輸入格式:輸入只有一行,即一個(gè)前綴表達(dá)式字符串。
輸出格式:輸出相應(yīng)的計(jì)算結(jié)果(如果是除法,直接采用c語(yǔ)言的“/”運(yùn)算符,結(jié)果
為整數(shù))。
輸入輸出樣例
樣例輸入
+52
樣例輸出
7
本題的C++參考代碼如下:
#include<iostream>
usingnamespacestd;
intmain()
(
charc;
inta,b;
cin?c?a?b;
intres;
if(c==,+,)res=a+b;
elseif(c==,-,)res=a-b;
elseif(c=='*')res=a*b;
elseres=a/b;
cout?res;
return0;
本題的c參考代碼如下:
#include<stdio.h>
intmain()
{inta[2];
inti,j;
charc=getchar();
for(i=0;i<2;i++)
scanfC'%dn,&a[i]);
if(c==,+')
j=a[O]+a[l];
elseif(c==-*)
j=a[O]-a[l];
elseif(c==,*1)
j=a[O]*a[l];
elseif(c=='/')
j=a[O]/a[l];
printf("%d\j);
retum0;
)
試題編號(hào)ALGO-91
算法訓(xùn)練Anagrams問(wèn)題
問(wèn)題描述
Anagrams指的是具有如下特性的兩個(gè)單詞:在這兩個(gè)單詞當(dāng)中,每一個(gè)英文字母(不
區(qū)分大小寫(xiě))所出現(xiàn)的次數(shù)都是相同的。例如,“Unclear”和“Nuclear"、“Rimon”和“MinOR”
都是Anagramso編寫(xiě)一個(gè)程序,輸入兩個(gè)單詞,然后判斷一下,這兩個(gè)單詞是否是Anagrams?
每一個(gè)單詞的長(zhǎng)度不會(huì)超過(guò)80個(gè)字符,而且是大小寫(xiě)無(wú)關(guān)的。
輸入格式:輸入有兩行,分別為兩個(gè)單詞。
輸出格式:輸出只有一個(gè)字母Y或N,分別表示Yes和No。
輸入輸出樣例
樣例輸入
Unclear
Nuclear
樣例輸出
Y
本題的C++參考代碼如下:
#include<iostream>
#include<cmath>
#include<string>
#include<windows.h>
#include<stack>
#include<vector>
#include<iomanip>
#include<stack>
#include<set>
#include<map>
usingnamespacestd;
charGetCapital(charc)
(
if(c<=,Z,)
returnc;
else
return
)
intmain(intargc,char**argv){
map<char,int>a,b;
stringt;
cin?t;
for(inti=O;i<t.length();i++)
a[GetCapital(t[i])]++;
cin?t;
for(inti=O;i<t.length();i++)
b[GetCapital(t[i])]++;
if(a==b)
cout?uYn;
else
cout?uNn;
return0;
}
本題的c參考代碼如下:
#include<stdio.h>
voidsort(chara[],intlen)
(
inti,j,max;
for(i=0;i<len;i++)
(
max=i;
for(j=i+1;j<len;j++)
if(a[j]>a[max])max=j;
j=a[i];a[i]=a[max];a[max]=j;
)
)
voidstrtoupper(chara[],intlen)
(
inti;
for(i=0;i<len;i++)
if(a[i]>='a'&&a[i]<=,z')a[i]-=32;
)
intmystrcmp(chara[],int11,charb[],int12)
(
if(ll!=12)return0;
inti;
for(i=0;i<ll;i++)
if(a[i]!=b[i])return0;
return1;
intmystrlen(char*p)
{
int1=0;
while(*p++!=0)
1++;
return1;
}
intmain()
(
charsl[l000]={0},s2[l000]={0};
int11,12;
scanf(H%s%s",sl,s2);
ll=mystrlen(sl);
12=mystrlen(s2);
strtoupper(sl,ll);
strtoupper(s2,12);
sort(sl,ll);
sort(s2,12);
if(mystrcmp(s1,11,s2,12))printf(uYn);
elseprintf(”N");
return0;
試題編號(hào)ALGO-90
算法訓(xùn)練出現(xiàn)次數(shù)最多的整數(shù)
問(wèn)題描述
編寫(xiě)一個(gè)程序,讀入一組整數(shù),這組整數(shù)是按照從小到大的順序排列的,它們的個(gè)數(shù)N
也是由用戶輸入的,最多不會(huì)超過(guò)20。然后程序?qū)?duì)這個(gè)數(shù)組進(jìn)行統(tǒng)計(jì),把出現(xiàn)次數(shù)最多
的那個(gè)數(shù)組元素值打印出來(lái)。如果有兩個(gè)元素值出現(xiàn)的次數(shù)相同,即并列第一,那么只打印
比較小的那個(gè)值。
輸入格式:第一行是一個(gè)整數(shù)N,N£20;接下來(lái)有N行,每一行表示一個(gè)整數(shù),
并且按照從小到大的順序排列。
輸出格式:輸出只有一行,即出現(xiàn)次數(shù)最多的那個(gè)元素值。
輸入輸出樣例
樣例輸入
5
100
150
150
200
250
樣例輸出
150
本題的C++參考代碼如下:
#include“iostream”
#includeustring"
usingnamespacestd;
inimain()
(
intn;
cin?n;
if(n<=0)return0;
string*a=newstring[n];
inti;
for(i=0;i<n;++i)
cin?a[i];
stringnumber=a[0];
intcount=1;
intflag=1;
for(i=1;i<n;++i)
(
if(a[i].compare(a[i-1])==0)
flag=flag+1;
if(a[i].compare(a[i-1])==0IIi==n-1)
(
if(flag>count)
(
count=flag;
number=a[i-1];
)
flag=1;
)
}
cout?number?endl;
return0;
)
本題的c參考代碼如下:
#include<stdio.h>
intmain()
(
intn,ij,t,max=1,num=0;
scanf("%d”,&n);
if(n>0)
(
inta[n];
for(i=0;i<n;i++)
scanf(n%dn,a+i);
j=num=a[0];
t=l;
for(i=l;i<n;i++)
if(a[i]==j)
(
++t;
if(t>max)
max=t;num=a[i];
else
t=l;
j=a[i];
)
printf("%d",num);
return0;
}
試題編號(hào)ALGO-87
算法訓(xùn)練字串統(tǒng)計(jì)
問(wèn)題描述
給定一個(gè)長(zhǎng)度為n的字符串S,還有一個(gè)數(shù)字L,統(tǒng)計(jì)長(zhǎng)度大于等于L的出現(xiàn)次數(shù)最多
的子串(不同的出現(xiàn)可以相交),如果有多個(gè),輸出最長(zhǎng)的,如果仍然有多個(gè),輸出第一次
出現(xiàn)最早的。
輸入格式
第一行一個(gè)數(shù)字L。
第二行是字符串So
L大于0,且不超過(guò)S的長(zhǎng)度。
輸出格式
一行,題目要求的字符串。輸入樣例1:
4
bbaabbaaaaa輸出樣例1:
bbaa輸入樣例2:
2
bbaabbaaaaa輸出樣例2:
aa
數(shù)據(jù)規(guī)模和約定
n<=60
S中所有字符都是小寫(xiě)英文字母。提示
枚舉所有可能的子串,統(tǒng)計(jì)出現(xiàn)次數(shù),找出符合條件的那個(gè)
本題的C++參考代碼如下:
#include<cstdio>
#include<cstring>
intmain()
chars[65],str[65];
intmax=O,t,n,len;
scanf(u%d%sn,&n,s);
len=strlen(s);
if(n<=len)
(
charss[65],tt[65];
for(inti=len;i>=n;i-)
(
ss[i]=tt[i]=^r;
for(intj=O;j<=len-i;j++)
(
t=l;
for(intk=O;k<i;k++)
ss[k]=s[k+j];
for(intx=j+1;x<=len-i;x++)
(
for(inty=O;y<i;y++)
tt[y]=s[y+x];
if(strcmp(ss,tt)==O)
t++;
)
if(t>max)
(
max=t;
strcpy(str,ss);
//printf(M%s\nn,str);
)
}
)
printf(H%s\nH,str);
本題的c參考代碼如下:
#include<stdio.h>
#include<string.h>
intmain(){
charS[1OOO],str[l000][1000],temp[l00],out[100];
intL,i=0,s,otongji=0,ttongji,a,b,c;
scanf("%d%c%c,\&L,&S[0],&S[0]);
while(S[i]!=\n!){
scanf(n%cM,&S[i+l]);
i++;
sm=vr;
for(s=i+l;L<=s;L++){
for(a=0;a<s+1-L;a++){〃賦值
for(b=0;b<L;b++){
str[a][b]=S[a+b];
)
str[a][b]=W;
for(i=0;i<a-l;){〃比較
for(b=O;b<a;b++){
if(str[b][O]!='\O'){
for(c=O;c<L;c++){
temp[c]=str[b][c];
)
temp[c]='\0";
ttongji=1;
i++;
str[b][0]=V)';
break;
)
)
for(b++;b<a;b++){
if(!strcmp(str[b],temp)){
ttongji++;
i++;
str[b][01='0';
if(ttongji>
otongjill(ttongji==otongji&&strlen(temp)>strlen(out))){
strcpy(out,temp);
otongji=ttongji;
)
)
i=0;
while(out[i]!=W){
printf("%c”,out[i]);
i++;
getchar();
return0;
)
試題編號(hào)ALGO-86
算法訓(xùn)練矩陣乘法
問(wèn)題描述
輸入兩個(gè)矩陣,分別是m*s,s*n大小。輸出兩個(gè)矩陣相乘的結(jié)果。
輸入格式
第一行,空格隔開(kāi)的三個(gè)正整數(shù)m,s,n(均不超過(guò)200)。
接下來(lái)m行,每行s個(gè)空格隔開(kāi)的整數(shù),表示矩陣A(i,j)o
接下來(lái)s行,每行n個(gè)空格隔開(kāi)的整數(shù),表示矩陣B(i,j)o
輸出格式
m行,每行n個(gè)空格隔開(kāi)的整數(shù),輸出相乘彳爰的矩陣C(i,j)的值。
樣例輸入
232
10-1
11-3
03
12
31
樣例輸出
-32
-82
提示
矩陣C應(yīng)該是m行n歹U,其中C(i,j)等于矩陣A第i行行向量與矩陣B第j列列向量的內(nèi)積。
例如樣例中C(l,1)=(1,0,-1)*(0,1,3)=1*0+0*1+(-1)*3=3
本題的C++參考代碼如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
intmain()
(
intm,s,n;
intsum=0;
int
inta[200][200],b[200][200],c[200][200];
scanf("%d%d%d",&m,&s,&n);
for(i=0;i<m;i++)
(
for(j=0;j<s;j++)
scanf("%d",&a[i][j]);
I
for(i=0;i<s;i++)
{
for(j=0;j<n;j++)
scanf("%d",&b[i][j]);
for(i=0;i<m;i++)
(
for(j=0;j<n;j++)
(
for(l=0;l<s;l++)
(
sum+=(a[i][l]*b[l]|j]);
)
c[i]|j]=sum;
sum=0;
)
)
for(i=0;i<m;i++)
(
for(j=0;j<n;j++)
printf("%d",c[i][j]);
printf("\n");
I
return0;
本題的c參考代碼如下:
#include<stdio.h>
intmain(){
intm,s,n,ij,k,a[200][200],b[200][200],c[200][200];
scanf(H%d%d%dM,&m,&s,&n);
for(i=1;i<=m;i++){
for(j=l;j<=s;j++)
scanf(n%dM,&a[i][j]);
for(i=l;i<=s;i++){
for(j=l;j<=n;j++)
scanf("%d",&b[i][j]);
)
for(i=l;i<=m;i++){
for(j=1;j<=n;j++)
c[i][j]=O;
}
for(i=l;i<=m;i++){
for(j=l;j<=n;j++){
for(k=1;k<=s;k++){
c[i][j]=c[i][j]+a[i][k]*b[k][j];
)
)
I
for(i=l;i<=m;i++){
for(j=l;j<=n;j++)
printf("%d",c[i][j]);
printf("\n");
return0;
試題編號(hào)ALGO-84
算法訓(xùn)練大小寫(xiě)轉(zhuǎn)換
問(wèn)題描述
編寫(xiě)一個(gè)程序,輸入一個(gè)字符串(長(zhǎng)度不超過(guò)20),然后把這個(gè)字符串內(nèi)的每一個(gè)字
符進(jìn)行大小寫(xiě)變換,即將大寫(xiě)字母變成小寫(xiě),小寫(xiě)字母變成大寫(xiě),然后把這個(gè)新的字符串輸
出。
輸入格式:輸入一個(gè)字符串,而且這個(gè)字符串當(dāng)中只包含英文字母,不包含其他類型的
字符,也沒(méi)有空格。
輸出格式:輸出經(jīng)過(guò)轉(zhuǎn)換后的字符串。
輸入輸出樣例
樣例輸入
AeDb
樣例輸出
aEdB
本題的C++參考代碼如下:
#include<iostream>
#include<string>
usingnamespacestd;
intmain()
(
stringstr;
cin?str;
unsignedi;
for(i=0;i<str.size();i++)
(
if(str[i]>=,A,&&str[i]<=,Z')
str[i]+=32;
elseif(str[i]>=,a'&&str[i]<=,z')
str[i]-=32;
)
cout?str;
return0;
本題的c參考代碼如下:
#include<stdio.h>
intmain()
(
inti;
charchflOO];
gets(ch);
i=0;
while(ch[i]!=,\O')
(
if(ch[i]<=,z'&&ch[i]>=,a')
ch[i]-=32;
elsech[iJ+=32;
i++;
)
puts(ch);
return0;
)
試題編號(hào)ALGO-81
算法訓(xùn)練動(dòng)態(tài)數(shù)組使用
從鍵盤(pán)讀入n個(gè)整數(shù),使用動(dòng)態(tài)數(shù)組存儲(chǔ)所讀入的整數(shù),并計(jì)算它們的和與平均值分別輸出。
要求盡可能使用函數(shù)實(shí)現(xiàn)程序代碼。平均值為小數(shù)的只保留其整數(shù)部分。
樣例輸入
34002
樣例輸出
91
樣例輸入
7
3275291
樣例輸出
294
本題的C++參考代碼如下:
#include<iostream>
usingnamespacestd;
intmain()
(
intn,a,sum=0;
cin?n;
for(inti=0;i<n;i++)
(
cin?a;
sum+=a;
)
cout?sum?nU?sum/n?endl;
return0;
本題的c參考代碼如下:
#include<stdio.h>
intmain()
inti,n,a[100],b[100],sum=0,avg=0;
scanf(H%d'\&n);
for(i=0;i<n;i++)
(
scanf("%dn,&b[i]);
a[i]=b[i];
sum=sum+a[i];
)
avg=sum/n;
printf("%d%d\n”,sum,avg);
return0;
試題編號(hào)ALGO-79
算法訓(xùn)練刪除數(shù)組零元素
從鍵盤(pán)讀入n個(gè)整數(shù)放入數(shù)組中,編寫(xiě)函數(shù)Compactintegers,刪除數(shù)組中所有值為0的元
素,其后元素向數(shù)組首端移動(dòng)。注意,Compactintegers函數(shù)需要接受數(shù)組及其元素個(gè)數(shù)作
為參數(shù),函數(shù)返回值應(yīng)為刪除操作執(zhí)行后數(shù)組的新元素個(gè)數(shù)。輸出刪除后數(shù)組中元素的個(gè)數(shù)
并依次輸出數(shù)組元素。樣例輸入:(輸入格式說(shuō)明:5為輸入數(shù)據(jù)的個(gè)數(shù),34002是
以空格隔開(kāi)的5個(gè)整數(shù))
5
34002
樣例輸出:(輸出格式說(shuō)明:3為非零數(shù)據(jù)的個(gè)數(shù),342是以空格隔開(kāi)的3個(gè)非零整數(shù))
3
342
樣例輸入
7
0070090
樣例輸出
2
79
樣例輸入
3
000
樣例輸出
0
本題的C++參考代碼如下:
#include"iostream”
usingnamespacestd;
intmain()
intn;
int*arr;
cin?n;
arr=newintfn];
intnum=0;
for(inti=0;i<n;++i)
(
cin?arr[i];
if(arr[i]!=0)
(
++num;
)
)
cout?num?endl;
for(inti=0;i<n;++i)
(
if(arr[i]==0)
(
continue;
)
cout?arr[i]?Mu;
)
return0;
)
本題的c參考代碼如下:
#includeustdio.h"
intCompactlntegers(inta[],intlen)
(
inti,j,k;
for(k=0;k<len;k++)
for(i=0;i<len;i++)
(
if(a[i]==0)
(
for(j=i;j<len-l;j++)
a[j]=a[j+l];
len—;
returnlen;
voidprint(intaf],intlen)
(
inti;
for(i=0;i<len;i++)
printf(M%d",a[i]);
printf(n\nu);
)
intmain()
(
inta[100000];
intn;
scanf("%d”,&n);
inti;
for(i=0;i<n;i++)
scanf("%d”,&a[i]);
intlen=Compactlntegers(a,n);
if(len>l)
(
printf("%d\n",len);
print(a,len);
}
else
printf("%dn,0);
getchar();
getchar();
getchar();
return0;
試題編號(hào)ALGO-53
算法訓(xùn)練最小乘積(基本型)
問(wèn)題描述
給兩組數(shù),各n個(gè)。
請(qǐng)調(diào)整每組數(shù)的排列順序,使得兩組數(shù)據(jù)相同下標(biāo)元素對(duì)應(yīng)相乘,然后相加的和最小。
要求程序輸出這個(gè)最小值。
例如兩組數(shù)分別為:13-5和-241
那么對(duì)應(yīng)乘積取和的最小值應(yīng)為:
(-5)*4+3*(-2)+1*1=-25
輸入格式
第一個(gè)行一個(gè)數(shù)T表示數(shù)據(jù)組數(shù)。后面每組數(shù)據(jù),先讀入一個(gè)n,接下來(lái)兩行每行n個(gè)
數(shù),每個(gè)數(shù)的絕對(duì)值小于等于1000。
n<=8,T<=1000
輸出格式
一個(gè)數(shù)表示答案。
樣例輸入
2313-5-24151234510101
樣例輸出
-256
本題的C++參考代碼如下:
#include<iostream>
#include<algorithm>
usingnamespacestd;
inta[8],b[8];
intmain()
(
intT,n;
inti,j;
cin?T;
while(T—)
(
intsum=O;
cin?n;
for(i=0;i<n;i++)
cin?a[i];
for(i=0;i<n;i++)
cin?b[i];
sort(a,a+n);
sort(b,b+n);
for(i=0;i<n;i++)
(
sum+=a[i]*b[n-l-i];
}
cout?sum?endl;
)
return0;
本題的c參考代碼如下:
#include<stdio.h>
voidsort1(int*a,intn)
(
inti,j;
inttmp;
for(i=0;i<n-l;i++)
for(j=0;j<n-1-i;j++)
if(aU]>a[j+l])
(
tmp=a[j];
a[j]=a[j+l];
a[j+l]=tmp;
}
(
voidsort2(int*a,intn)
(
inti,j;
inttmp;
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
if(aU]<aU+l])
tmp=a[j];
a[j]=a[j+l];
a[j+l]=tmp;
)
)
intmain(void)
(
intT;
intn,i;
inttotal;
inta[8],b[8],c[8];
scanf(u%d'\&T);
while(T)
(
total=0;
scanf(u%dn,&n);
for(i=0;i<n;i++)
scanf("%dn,&a[i]);
for(i=0;i<n;i++)
scanf("%dH,&b[i]);
sortl(a,n);
sort2(b,n);
for(i=0;i<n;i++)
c[ij=alij*b[i];
for(i=0;i<n;i++)
total+=clij;
printf(n%d\n",total);
T-;
return0;
試題編號(hào)ALGO-51
算法訓(xùn)練Torry的困惑(基本型)
問(wèn)題描述
Torry從小喜愛(ài)數(shù)學(xué)。一天,老師告訴他,像2、3、5、7……這樣的數(shù)叫做質(zhì)數(shù)。Torry
突然想到一個(gè)問(wèn)題,前10,100,1000,10000……個(gè)質(zhì)數(shù)的乘積是多少呢?他把這個(gè)問(wèn)題
告訴老師。老師愣住了,一時(shí)回答不出來(lái)。于是Torry求助于會(huì)編程的你,請(qǐng)你算出前n個(gè)
質(zhì)數(shù)的乘積。不過(guò),考慮到你才接觸編程不久,Torry只要你算出這個(gè)數(shù)模上50000的值。
輸入格式
僅包含一個(gè)正整數(shù)儲(chǔ)其中n<=l00000?
輸出格式
輸出一行,即前n個(gè)質(zhì)數(shù)的乘積模50000的值。
樣例輸入
1
樣例輸出
2
本題的C++參考代碼如下:
#include<iostream>
usingnamespacestd;
inta[100005];
intmain()
(
unsignedinti,j,n,ent=1,cj=2;
cin?n;
if(n==1)
(
cout?2?endl;
return0;
)
alOJ=2;
for(i=3;i<2000000;i++)
for(j=0;j<ent;j++)
if(aU]*a[j]>i)
(
break;
)
else
(
if(!(i%aUD)
(
break;
if(aU]*a[j]>i)
(
a[cnt++]=i;
cj=(cj%50000)*(i%50000);
if(ent==n)
(
break;
}
)
)
cout?cj%50000?endl;
return0;
)
本題的c參考代碼如下:
#include<stdio.h>
intpr[100010];
inttop;
intisPrime(intn)
(
inti;
for(i=0;i<top;i++)
(
if(n%pr[i]==0)
(
return0;
return1;
intfindNextPrime(void)
intn=pr[top-1]+1;
while(!isPrime(n))
(
n++;
)
pr[top++]=n;
returnn;
)
intmain(void)
(
inti,n;
intresult=2;
scanf(u%d",&n);
pr[O]=2;
top=1;
for(i=1;i<n;i++)
{
intx=findNextPrime();
result*=x;
result%=50000;
prinlf("%d",result);
return0;
)
試題編號(hào)ALGO-49
算法訓(xùn)練尋找數(shù)組中最大值
問(wèn)題描述
對(duì)于給定整數(shù)數(shù)組a[],尋找其中最大值,并返回下標(biāo)。
輸入格式
整數(shù)數(shù)組an,數(shù)組元素個(gè)數(shù)小于1等于100。輸出數(shù)據(jù)分作兩行:第一行只有一個(gè)數(shù),
表示數(shù)組元素個(gè)數(shù):第二行為數(shù)組的各個(gè)元素。
輸出格式
輸出最大值,及其下標(biāo)
樣例輸入
3321
樣例輸出
30
本題的C++參考代碼如下:
#include<iostream>
#include<algorithm>
#include<cstring>
usingnamespacestd;
inimain(){
intn,a[1000],max,ans;
cin?n;
for(inti=0;i<n;i++)
cin?a[i];
max=a[0];ans=0;
for(inti=l;i<n;i++){
if(a[i]>max){
max=a[i];
ans=i;
)
)
cout?max?M"?ans;
return0;
本題的c參考代碼如下:
#include<stdio.h>
inimain()
(
intn,i,k,max;
scanf(n%dH,&n);
inta[n];
for(i=0;i<n;i++)
scanf(n%d",&a[i]);
max=a[O];
for(i=0;i<n;i++)
{
if(a[i]>=max)
(
max=a[i];
k=i;
)
)
printf(n%d%d'\max,k);
return0;
)
試題編號(hào)ALGO-48
算法訓(xùn)練關(guān)聯(lián)矩陣
問(wèn)題描述
有一個(gè)n個(gè)結(jié)點(diǎn)m條邊的有向圖,請(qǐng)輸出他的關(guān)聯(lián)矩陣。
輸入格式
第一行兩個(gè)整數(shù)n、m,表示圖中結(jié)點(diǎn)和邊的數(shù)目。n<=100,m<=1000o
接下來(lái)m行,每行兩個(gè)整數(shù)a、b,表示圖中有(a,b)邊。
注意圖中可能含有重邊,但不會(huì)有自環(huán)。
輸出格式
輸出該圖的關(guān)聯(lián)矩陣,注意請(qǐng)勿改變邊和結(jié)點(diǎn)的順序。
樣例輸入
59
12
31
15
25
23
23
32
43
54
樣例輸出
1-11000000
-100111-100
0100-1-11-10
00000001-1
00-1-100001
本題的C++參考代碼如下:
#include<iostream>
#include<cstdio>
usingnamespacestd;
intans[101][1001];
intmain()
intn,m;
inta,b;
cin?n?m;
for(inti=l;i<=m;i++)
(
scanf("%d%dH,&a,&b);
ans[a][i]=1;
ans[b][i]=-1;
)
for(inti=1;i<=n;i++)
(
for(intj=1;j<=m-l;j++)
(
printf(n%d",ans[i][j]);
}
printf(H%d\n",ans[i][m]);
}
return0;
)
本題的c參考代碼如下:
#include<stdio.h>
intmain()
(
inti,ii,n,m,a[1000][2];
scanf(^'%d%d',,&n,&m);
for(i=0;i<m;i++)
scanf(u%d%d",&a[i][0],&a[i][l]);
for(i=1;i<=n;i++)
(
for(ii=0;ii<m;ii++)
(
if(i==a[ii][0])
(
printf("l");
}
else
if(i==a[ii][l])
printf("-l");
)
else
(
printf("O");
)
printfC^n1');
return0;
試題編號(hào)ALGO-42
算法訓(xùn)練送分啦
問(wèn)題描述
這題想得分嗎?想,請(qǐng)輸出“yes”;不想,請(qǐng)輸出“no”.
輸出格式
輸出包括一行,為“yes”或“no”。
本題的C++參考代碼如下:
#include<cstdio>
#include<cstring>
usingnamespacestd;
intmain()
(
printf(Hyes\nM);
return0;
)
本題的c參考代碼如下:
#include<stdio.h>
#include<stdio.h>
intmain()
(
printf("yes\n");
return0;
試題編號(hào)ALGO-8
算法訓(xùn)練操作格子
問(wèn)題描述
有n個(gè)格子,從左到右放成一排,編號(hào)為1-n。
共有m次操作,有3種操作類型:
1.修改一個(gè)格子的權(quán)值,
2.求連續(xù)一段格子權(quán)值和,
3.求連續(xù)一段格子的最大值。
對(duì)于每個(gè)2、3操作輸出你所求出的結(jié)果。
輸入格式
第一行2個(gè)整數(shù)n,m。
接下來(lái)一行n個(gè)整數(shù)表示n個(gè)格子的初始權(quán)值。
接下來(lái)m行,每行3個(gè)整數(shù)p,x,y,p表示操作類型,p=l時(shí)表示修改格子x的權(quán)值為
y,p=2時(shí)表示求區(qū)間[x,y]內(nèi)格子權(quán)值和,p=3時(shí)表示求區(qū)間[x,y]內(nèi)格子最大的權(quán)值。
輸出格式
有若干行,行數(shù)等于p=2或3的操作總數(shù)。
每行1個(gè)整數(shù),對(duì)應(yīng)了每個(gè)p=2或3操作的結(jié)果。
樣例輸入
43
1234
213
143
314
樣例輸出
6
3
數(shù)據(jù)規(guī)模與約定
對(duì)于20%的數(shù)據(jù)nv=100,m<=200。
對(duì)于50%的數(shù)據(jù)n<=5000,m<=5000o
對(duì)于100%的數(shù)據(jù)1<=n<=100000,m<=100000,0<=格子權(quán)值<=10000?
本題的C++參考代碼如下:
//test
//l.cpp
/*
ID:Firwaless
LANG:C++
TASK:
*/
#include<cstdio>
#include<algorithm>
structTree
(
intsum,max;
);
Treetree[l?18];
voidscan(int&n)
(
chare;
c=getchar();
if(c==EOF){
return;
)
while(c<OIIc>9){
c=getchar();
)
n=c-O;
while(c=getchar(),c>='O'&&c<=*9'){
n*=10;
n+=c-'0*;
voidput(intn)
(
intent=0;
chars[16];
if(n==0){
putcharCO1);
return;
)
for(;n;n/=10){
s[cnt++]=n%10+*0';
)
while(ent—){
putchar(s[cnt]);
)
)
voidupdate(intn,intv)
(
for(n+=(1?17),tree[n].sum=tree[n].max=v,n?=1;n;n?=1){
tree[n].max=std::max(tree[n+n].max,tree[n+n+l].max);
tree[n].sum=tree[n+n].sum+tree[n+n+l].sum;
)
)
intquery(ints,intt,intfunc)
(
intsum=0,max=0;
for(s+=(1?17)-l,t+=(l?17)+l;sAtAl;s?=1,t?=1){
if(~s&1){
sum+=tree[sAIJ.sum;
max=std::max(max,tree[s八l].max);
)
if(t&1){
sum+=tree[tA1J.sum;
max=std::max(max,tree[tAl].max);
returnfunc?max:sum;
intmain()
intn,m,i,a,b,c;
scan(n);scan(m);
for(i=1;i<=n;++i){
scan(a);
update(i,a);
)
while(m—){
scan(c);scan(a);scan(b);
c==1&&(update(a,b),0);
c==2&&(put(query(a,b,0)),putchar(1\nr),0);
c==3&&(put(query(a,b,1)),putcharCXn1),0);
)
return0;
}
本題的c參考代碼如下:
#include<stdio.h>
#defineN100000
#defineA1000
#defineB100
intsum(int*a,intm,intn)
(
inti,s=0;
for(i=m;i<=n;i++)
s+=a[i];
returns;
)
intmax(int*a,intm,intn)
(
inti,s=a[m];
for(i=m+1;i<=n;i++)
if(s<a[i])
s=a[i];
returns;
)
intmain()
inti,j,k,m,n;
inta[100000],b[100000][3],c[A][2]={0};
scanf("%d%d",&n,&m);
for(i
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年企業(yè)物料策劃供應(yīng)合同協(xié)議
- 2025年律師事務(wù)所服務(wù)協(xié)議標(biāo)準(zhǔn)文本
- 2025年通信電源項(xiàng)目申請(qǐng)報(bào)告模板
- 2025年穿水冷卻裝置項(xiàng)目提案報(bào)告
- 2025年住宅銷售經(jīng)紀(jì)服務(wù)協(xié)議
- 2025年市場(chǎng)準(zhǔn)入合規(guī)策劃合作框架協(xié)議
- 2025年企業(yè)簽訂網(wǎng)絡(luò)安全協(xié)議
- 2025年企業(yè)股東間保密協(xié)議策劃樣本
- 2025年實(shí)習(xí)生供求策劃協(xié)議書(shū)模板
- 2025年丹陽(yáng)市美容院股東權(quán)益策劃與分配合同書(shū)
- 2025年菏澤醫(yī)學(xué)??茖W(xué)校高職單招職業(yè)技能測(cè)試近5年常考版參考題庫(kù)含答案解析
- 成都四川成都簡(jiǎn)陽(yáng)市簡(jiǎn)城街道便民服務(wù)和智慧蓉城運(yùn)行中心招聘綜治巡防隊(duì)員10人筆試歷年參考題庫(kù)附帶答案詳解
- 2025-2030全球廢棄食用油 (UCO) 轉(zhuǎn)化為可持續(xù)航空燃料 (SAF) 的催化劑行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 山東省臨沂市蘭山區(qū)2024-2025學(xué)年七年級(jí)上學(xué)期期末考試生物試卷(含答案)
- 2025年環(huán)衛(wèi)工作計(jì)劃
- 湖北省武漢市2024-2025學(xué)年度高三元月調(diào)考英語(yǔ)試題(含答案無(wú)聽(tīng)力音頻有聽(tīng)力原文)
- 品質(zhì)巡檢培訓(xùn)課件
- 一年級(jí)下冊(cè)勞動(dòng)《變色魚(yú)》課件
- 商務(wù)星球版地理八年級(jí)下冊(cè)全冊(cè)教案
- 天津市河西區(qū)2024-2025學(xué)年四年級(jí)(上)期末語(yǔ)文試卷(含答案)
- 新版高中物理必做實(shí)驗(yàn)?zāi)夸浖捌鞑?(電子版)
評(píng)論
0/150
提交評(píng)論