> 點個贊,看一看,好習慣!本文 **GitHub** [https://github.com/OUYANGSIHAI/JavaInterview](https://github.com/OUYANGSIHAI/JavaInterview) 已收錄,這是我花了 3 個月總結的一線大廠 Java 面試總結,本人已拿大廠 offer。
> 另外,原創文章首發在我的個人博客:[blog.ouyangsihai.cn](https://blog.ouyangsihai.cn),歡迎訪問。
文章推薦
- 精選java等全套學習資源
- 精選java電子圖書資源
- 精選大數據學習資源
- java項目練習精選
藍橋杯練習系統習題-基礎訓練
題目搜索方式:Ctrl+F—-> 輸入題目名稱—>定位到解答。
入門訓練(詳見 算法-藍橋杯習題(1-1))
基礎練習(詳見 算法-藍橋杯習題(2-1))
基礎練習(詳見 算法-藍橋杯習題(2-2))
算法訓練(詳見 算法-藍橋杯習題(3-1))
算法訓練(詳見 算法-藍橋杯習題(3-2))
算法訓練(詳見 算法-藍橋杯習題(3-3))
算法訓練(詳見 算法-藍橋杯習題(3-4))
算法訓練(詳見 算法-藍橋杯習題(3-5))
算法訓練(詳見 算法-藍橋杯習題(3-6))
算法提高(詳見 算法-藍橋杯習題(4-1))
算法提高(詳見 算法-藍橋杯習題(4-2))
歷屆試題(詳見 算法-藍橋杯習題(5-1))
歷屆試題(詳見 算法-藍橋杯習題(5-2))
基礎練習 閏年判斷
問題描述
給定一個年份,判斷這一年是不是閏年。
當以下情況之一滿足時,這一年是閏年:
年份是4的倍數而不是100的倍數;
年份是400的倍數。
其他的年份都不是閏年。
輸入格式
輸入包含一個整數y,表示當前的年份。
輸出格式
輸出一行,如果給定的年份是閏年,則輸出yes,否則輸出no。
說明:當試題指定你輸出一個字符串作為結果(比如本題的yes或者no,你需要嚴格按照試題中給定的大小寫,寫錯大小寫將不得分。
樣例輸入
2013
樣例輸出
no
樣例輸入
2016
樣例輸出
yes
數據規模與約定
1990 <= y <= 2050。
#include<stdio.h> main() {
int y; scanf(
"%d",&
y);
if(
y%4==
0&&
y%100!=
0||
y%400==
0)
printf(
"yes\n");
else printf(
"no\n");
return 0; }
基礎練習 01字串
問題描述
對于長度為5位的一個01串,每一位都可能是0或1,一共有32種可能。它們的前幾個是:
00000
00001
00010
00011
00100
請按從小到大的順序輸出這32種01串。
輸入格式
本試題沒有輸入。
輸出格式
輸出32行,按從小到大的順序每行一個長度為5的01串。
樣例輸出
00000
00001
00010
00011
<以下部分省略>
#include<stdio.h> main() {
int a,b,c,d,e;
for(e=
0;e<=
1;e++)
for(d=
0;d<=
1;d++)
for(c=
0;c<=
1;c++)
for(b=
0;b<=
1;b++)
for(a=
0;a<=
1;a++)
printf(
"%d%d%d%d%d\n",e,d,c,b,a);
return 0; }
基礎練習 字母圖形
問題描述
利用字母可以組成一些美麗的圖形,下面給出了一個例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
這是一個5行7列的圖形,請找出這個圖形的規律,并輸出一個n行m列的圖形。
輸入格式
輸入一行,包含兩個整數n和m,分別表示你要輸出的圖形的行數的列數。
輸出格式
輸出n行,每個m個字符,為你的圖形。
樣例輸入
5 7
樣例輸出
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
數據規模與約定
1 <= n, m <= 26。
#include <stdio.h> #include <math.h> main() {
int n,m,j,k;
scanf(
"%d %d",&n,&m);
if(n>=
1&&m<=
26)
for(j=
0;j<n;j++) {
for(k=
0;k<m;k++)
printf(
"%c",
65+
abs(j-k));
printf(
"\n"); }
return 0; }
#include <stdio.h> #include <stdlib.h> #define MAXSIZE 26 //輸出 void Print(char matrix[MAXSIZE][MAXSIZE],int n,int m) {
int i,j;
for(i=
0;i<n;i++) {
for(j=
0;j<m;j++) {
printf(
"%c",matrix[i][j]); }
printf(
"\n"); } }
//實現字母圖形 void Drawing(int n,int m) {
int i,j;
int point=
0;
char str;
char matrix[MAXSIZE][MAXSIZE];
for(i=
0;i<n;i++) { str=
'A';
for(j=i;j<m;j++) { matrix[i][j]=str++; } str=
'A';
for(j=i
-1;j>=
0;j--) { matrix[i][j]=++str; } } Print(matrix,n,m); }
int main() {
int n,m;
scanf(
"%d%d",&n,&m); Drawing(n,m);
return 0; }
基礎練習 數列特征
問題描述
給出n個數,找出這n個數的最大值,最小值,和。
輸入格式
第一行為整數n,表示數的個數。
第二行有n個數,為給定的n個數,每個數的絕對值都小于10000。
輸出格式
輸出三行,每行一個整數。第一行表示這些數中的最大值,第二行表示這些數中的最小值,第三行表示這些數的和。
樣例輸入
5
1 3 -2 4 5
樣例輸出
5
-2
11
數據規模與約定
1 <= n <= 10000。
#include <stdio.h> #define MaxSize 10000 main() {
int n;
int sum=
0,min=MaxSize,max=-MaxSize;
scanf(
"%d",&n);
while(n--) {
int temp,st;
scanf(
"%d",&temp);
if(temp>max) { max=temp; }
if(temp<min) { min=temp; } sum+=temp; }
printf(
"%d\n%d\n%d\n",max,min,sum);
return 0; }
基礎練習 查找整數
問題描述
給出一個包含n個整數的數列,問整數a在數列中的第一次出現是第幾個。
輸入格式
第一行包含一個整數n。
第二行包含n個非負整數,為給定的數列,數列中的每個數都不大于10000。
第三行包含一個整數a,為待查找的數。
輸出格式
如果a在數列中出現了,輸出它第一次出現的位置(位置從1開始編號),否則輸出-1。
樣例輸入
6
1 9 4 8 3 9
9
樣例輸出
2
數據規模與約定
1 <= n <= 1000。
#include<stdio.h> #define MaxSize 1000+5 main() {
int n,i,a[MaxSize],s,m=
0;
scanf(
"%d",&n);
for(i=
0;i<n;i++) {
scanf(
"%d ",&a[i]); }
scanf(
"%d",&s);
for(i=
0;i<n;i++) {
if(s==a[i]) {
printf(
"%d\n",i+
1);
return 0; } }
printf(
"-1\n");
return 0; }
基礎練習 楊輝三角形
問題描述
楊輝三角形又稱Pascal三角形,它的第i+1行是(a+b)i的展開式的系數。
它的一個重要性質是:三角形中的每個數字等于它兩肩上的數字相加。
下面給出了楊輝三角形的前4行:
1
1 1
1 2 1
1 3 3 1
給出n,輸出它的前n行。
輸入格式
輸入包含一個數n。
輸出格式
輸出楊輝三角形的前n行。每一行從這一行的第一個數開始依次輸出,中間使用一個空格分隔。請不要在前面輸出多余的空格。
樣例輸入
4
樣例輸出
1
1 1
1 2 1
1 3 3 1
數據規模與約定
1 <= n <= 34。
#include<stdio.h> main() {
int n,x,y,a[
35][
35]={
0};
int i,j;
scanf(
"%d",&n);
if(n>=
1&&n<=
34)
//賦值對角線元素為1 {
for(x=
1;x<=n;x++) { a[x][
1]=
1; a[x][x]=
1; }
//賦值其他元素 for(x=
3;x<=n;x++)
for(y=
2;y<=n;y++) a[x][y]=a[x
-1][y]+a[x
-1][y
-1];
//輸出對應元素 for(j=
1,x=
1;x<=n;x++) {
for(y=
1;y<=j;y++) {
printf(
"%d ",a[x][y]); } j++;
printf(
"\n"); } }
return 0; }
基礎練習 特殊的數字
問題描述
153是一個非常特殊的數,它等于它的每位數字的立方和,即153=111+555+333。編程求所有滿足這種條件的三位十進制數。
輸出格式
按從小到大的順序輸出滿足條件的三位十進制數,每個數占一行。
#include<stdio.h> main() {
int i,j,k;
int n;
for(i=
1;i<=
9;i++)
for(j=
0;j<=
9;j++)
for(k=
0;k<=
9;k++) {
if(i*
100+j*
10+k==i*i*i+j*j*j+k*k*k)
printf(
"%d%d%d\n",i,j,k); }
return 0; }
基礎練習 回文數
問題描述
1221是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的,編程求所有這樣的四位十進制數。
輸出格式
按從小到大的順序輸出滿足條件的四位十進制數。
#include<stdio.h> main() {
int a,b,i;
for(a=
1;a<=
9;a++)
for(b=
0;b<=
9;b++) {
printf(
"%d%d%d%d\n",a,b,b,a); }
return 0; }
#include<stdio.h> int main() {
int a,b,c,d,i;
for(i=
1000;i<=
9999;i++) { a=i/
1000; b=i/
100%10; c=i/
10%10; d=i%10;
if(a==d&&b==c)
printf(
"%d\n",i); }
return 0; }
基礎練習 特殊回文數
問題描述
123321是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的。
輸入一個正整數n, 編程求所有這樣的五位和六位十進制數,滿足各位數字之和等于n 。
輸入格式
輸入一行,包含一個正整數n。
輸出格式
按從小到大的順序輸出滿足條件的整數,每個整數占一行。
樣例輸入
52
樣例輸出
899998
989989
998899
數據規模和約定
1<=n<=54。
#include<stdio.h> main() {
int n,a,b,c; scanf(
"%d",&n);
for(a=
1;a<=
9;a++)
for(b=
0;b<=
9;b++)
for(c=
0;c<=
9;c++) {
if(n==
2*a+
2*b+c)
printf(
"%d%d%d%d%d\n",a,b,c,b,a); }
for(a=
1;a<=
9;a++)
for(b=
0;b<=
9;b++)
for(c=
0;c<=
9;c++) {
if(n==
2*a+
2*b+
2*c)
printf(
"%d%d%d%d%d%d\n",a,b,c,c,b,a); }
return 0; }
#include<stdio.h> int main() {
int a,b,c,d,e,f,t,all; scanf(
"%d",&t);
for(a=
1;a<
10;a++)
for(b=
0;b<
10;b++)
for(c=
0;c<
10;c++)
for(d=
0;d<
10;d++)
for(e=
0;e<
10;e++) {
if(a==e)
if(b==d) { all=a+b+c+d+e;
if(all==t)
printf(
"%d\n",a*
10000+b*
1000+c*
100+d*
10+e); } }
for(a=
1;a<
10;a++)
for(b=
0;b<
10;b++)
for(c=
0;c<
10;c++)
for(d=
0;d<
10;d++)
for(e=
0;e<
10;e++)
for(f=
0;f<
10;f++) {
if(a==f)
if(b==e)
if(c==d) { all=a+b+c+d+e+f;
if(all==t)
printf(
"%d\n",a*
100000+b*
10000+c*
1000+d*
100+e*
10+f); } }
return 0; }
基礎練習 十進制轉十六進制
問題描述
十六進制數是在程序設計時經常要使用到的一種整數的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16個符號,分別表示十進制數的0至15。十六進制的計數方法是滿16進1,所以十進制數16在十六進制中是10,而十進制的17在十六進制中是11,以此類推,十進制的30在十六進制中是1E。
給出一個非負整數,將它表示成十六進制的形式。
輸入格式
輸入包含一個非負整數a,表示要轉換的數。0<=a<=2147483647
輸出格式
輸出這個整數的16進制表示
樣例輸入
30
樣例輸出
1E
#include<stdio.h> main() {
int a;
scanf(
"%d",&a);
if(
0<=a&&a<=
2147483647)
printf(
"%X",a);
return 0; }
#include <stdio.h> #include <stdlib.h> char data[]={
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'A',
'B',
'C',
'D',
'E',
'F'};
//輸出 void Print(char *num,int n) {
int i;
for(i=n
-1;i>=
0;i--)
printf(
"%c",num[i]);
printf(
"\0");
printf(
"\n"); }
//將十六進制數轉換為十進制數 int Transform(char *num,long long value) {
int n=
0;
while(value>=
16) { num[n++]=data[value%
16]; value/=
16; } num[n++]=data[value%
16];
return n; }
int main() {
long long value;
char num[
10];
int n;
scanf(
"%I64d",&value); n=Transform(num,value); Print(num,n);
return 0; }
基礎練習 十六進制轉十進制
問題描述
從鍵盤輸入一個不超過8位的正的十六進制數字符串,將它轉換為正的十進制數后輸出。
注:十六進制數中的10~15分別用大寫的英文字母A、B、C、D、E、F表示。
樣例輸入
FFFF
樣例輸出
65535
#include<stdio.h> #include<string.h> int main() {
char a[
9];
int i;
unsigned int n=
1,b=
0;
scanf(
"%s",a);
for(i=
strlen(a)
-1;i>=
0;i--) {
if(a[i]<=
'9') b+=(a[i]-
'0')*n;
else b+=(a[i]-
'A'+
10)*n; n=
16*n; }
printf(
"%u\n",b);
return 0; }
#include<stdio.h> #include<string.h> #include<math.h> int main() {
double sum=
0,x;
char a[
8];
int len,i=
0; gets(a); len=
strlen(a);
while(len) {
if(a[len
-1]>=
'A'&&a[len
-1]<=
'F') x=(a[len
-1]-
'7')*
pow(
16,i++);
else x=(a[len
-1]-
'0')*
pow(
16,i++); sum+=x; len--; }
printf(
"%.0lf",sum);
return 0; }
基礎練習 十六進制轉八進制
問題描述
給定n個十六進制正整數,輸出它們對應的八進制數。
輸入格式
輸入的第一行為一個正整數n (1<=n<=10)。
接下來n行,每行一個由0~{9}、大寫字母{A}~F組成的字符串,表示要轉換的十六進制正整數,每個十六進制數長度不超過100000。
輸出格式
輸出n行,每行為輸入對應的八進制正整數。
注意
輸入的十六進制數不會有前導0,比如012A。
輸出的八進制數也不能有前導0。
樣例輸入
2
39
123ABC
樣例輸出
71
4435274
提示
先將十六進制數轉換成某進制數,再由某進制數轉換成八進制。
#include <cstdio> #include <iostream> #include <cstring> #include <string> #include <cmath> #include <algorithm> #include <set> using namespace std;
char str[
100005], num;
void Fun(int i, int state) {
int temp;
if(i <
0) {
if(num !=
0) {
printf(
"%d", num); }
return; }
if(state !=
3) { temp = str[i] >=
'0' && str[i] <=
'9' ? str[i] -
'0' : str[i] -
'A' +
10; temp <<= state; num |= temp; temp = num; num >>=
3; Fun(i -
1, state +
1);
printf(
"%d", (temp &
1) + (temp &
2) + (temp &
4)); }
else { temp = num; num >>=
3; Fun(i,
0);
printf(
"%d", (temp &
1) + (temp &
2) + (temp &
4)); } }
int main() {
int n;
scanf(
"%d", &n);
while(n--) { num =
0;
scanf(
"%s", str); Fun(
strlen(str) -
1,
0);
printf(
"\n"); }
return 0; }
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MaxSize 100000 void saveB(char *b,char c3,char c2,char c1,char c0,int start) { b[start]=c3; b[start+
1]=c2; b[start+
2]=c1; b[start+
3]=c0; }
int htob(char *h,char *b) {
int i,j;
int hl=
strlen(h);
for(i=
0;i<hl;i++)
switch(h[i]) {
case '0': { saveB(b,
'0',
'0',
'0',
'0',
4*i);
break; }
case '1': { saveB(b,
'0',
'0',
'0',
'1',
4*i);
break; }
case '2': { saveB(b,
'0',
'0',
'1',
'0',
4*i);
break; }
case '3': { saveB(b,
'0',
'0',
'1',
'1',
4*i);
break; }
case '4': { saveB(b,
'0',
'1',
'0',
'0',
4*i);
break; }
case '5': { saveB(b,
'0',
'1',
'0',
'1',
4*i);
break; }
case '6': { saveB(b,
'0',
'1',
'1',
'0',
4*i);
break; }
case '7': { saveB(b,
'0',
'1',
'1',
'1',
4*i);
break; }
case '8': { saveB(b,
'1',
'0',
'0',
'0',
4*i);
break; }
case '9': { saveB(b,
'1',
'0',
'0',
'1',
4*i);
break; }
case 'A': { saveB(b,
'1',
'0',
'1',
'0',
4*i);
break; }
case 'B': { saveB(b,
'1',
'0',
'1',
'1',
4*i);
break; }
case 'C': { saveB(b,
'1',
'1',
'0',
'0',
4*i);
break; }
case 'D': { saveB(b,
'1',
'1',
'0',
'1',
4*i);
break; }
case 'E': { saveB(b,
'1',
'1',
'1',
'0',
4*i);
break; }
case 'F': { saveB(b,
'1',
'1',
'1',
'1',
4*i);
break; } }
return 4*hl; }
int btoo(char *b,char *o,int bl) {
int i,j;
int ol;
int value;
if(bl%
3==
0) ol=bl/
3;
else ol=bl/
3+
1; j=bl
-1;
for(i=ol
-1;i>=
0;i--) {
if(i>
0) o[i]=b[j]
-48+(b[j
-1]
-48)*
2+(b[j
-2]
-48)*
4+
48;
else {
switch(j) {
case 2: o[i]=b[j]
-48+(b[j
-1]
-48)*
2+(b[j
-2]
-48)*
4+
48;
break;
case 1: o[i]=b[j]
-48+(b[j
-1]
-48)*
2+
48;
break;
case 0: o[i]=b[j];
break; } } j=j
-3; }
return ol; }
void printO(char *o,int ol) {
int i=
0;
if(o[
0]==
'0') i=
1;
for(;i<ol;i++) {
printf(
"%c",o[i]); }
printf(
"\n"); } main() {
char h[MaxSize];
char b[
4*MaxSize];
char o[
4*MaxSize/
3+
1];
int n,i,bl,ol;
scanf(
"%d",&n); getchar();
for(i=
0;i<n;i++) { gets(h); bl=htob(h,b); ol=btoo(b,o,bl); printO(o,ol); } }
基礎練習 數列排序
問題描述
給定一個長度為n的數列,將這個數列按從小到大的順序排列。1<=n<=200
輸入格式
第一行為一個整數n。
第二行包含n個整數,為待排序的數,每個整數的絕對值小于10000。
輸出格式
輸出一行,按從小到大的順序輸出排序后的數列。
樣例輸入
5
8 3 6 4 9
樣例輸出
3 4 6 8 9
#include <stdio.h> int main() {
int n,i,j,s,a[
200];
scanf(
"%d",&n);
for(i=
1;i<=n;i++) {
scanf(
"%d",&a[i]); } i=n+
1;
while(i--)
for(j=
1;j<i;j++) {
if(a[j]>a[j+
1]) { s=a[j+
1]; a[j+
1]=a[j]; a[j]=s; } }
for(i=
1;i<=n;i++)
printf(
"%d ",a[i]);
return 0; }
#include <stdio.h> #include <stdlib.h> void Print(int *data,int n) {
int i;
for(i=
0;i<n;i++) {
printf(
"%d ",data[i]); }
printf(
"\n"); }
int Split(int *data,int pre,int rear) {
int value=data[pre];
while(pre<rear) {
while(data[rear]>=value && pre<rear) rear--; data[pre]=data[rear];
while(data[pre]<value && pre<rear) pre++; data[rear]=data[pre]; } data[pre]=value;
return pre; }
//快速排序 void QuickSort(int *data,int pre,int rear) {
if(pre<rear) {
int mid=Split(data,pre,rear); QuickSort(data,pre,mid
-1); QuickSort(data,mid+
1,rear); } }
int main() {
int i;
int n;
int *data;
scanf(
"%d",&n); data=(
int *)
malloc(
sizeof(
int)*n);
for(i=
0;i<n;i++) {
scanf(
"%d",&data[i]); } QuickSort(data,
0,n
-1); Print(data,n);
return 0; }
總結
以上是生活随笔為你收集整理的蓝桥杯练习系统习题-基础训练的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。