蓝桥杯 练习系统 基础练习答案Java
- 格式:doc
- 大小:98.50 KB
- 文档页数:19
基础练习21-基础练习Sine之舞问题描述最近町为他的奶牛们开设了数学分析课,FJ知道若耍学好这门课,必须有一个好的三角函数基本功。
所以他准备和奶牛们做-个“SineZ舞”的游戏,寓教于乐,提高奶牛们的计算能力。
不妨设An=sin(l - sin (2+sin (3 - sin (4+... sin(n))...)Sn二(…(Al+n)A2+n-1)A3+.・• +2)An+lFJ想让奶牛们计算Sn的值,请你帮助FJ打印出Sn的完整表达式,以方便奶牛们做题。
输入格式仅冇一个数:N<201。
输出格式请输出相应的表达式Sn,以一个换行符结束。
输出屮不得含有多余的空格或换行、回车符。
样例输入3样例输出((sin(l)+3)sin(l-sin(2))+2)sin(l-sin(2 + sin(3)))+1解答:import java.util.Seanner;public class Main{* @param args*/public static void main(String[] args) {// TODO Auto-generated method stubSeanner seanner=new Seanner(System.in);System.out.pri ntln (sflnteger.parsel nt(sca nner.n extLi ne()), 1));//System.out.print(sin(3, 1));}static String s(int n」nt i)讦(i==n) return ""+An(n)+"+"+(n-i+l);}else {return ,,("+An(i)+"+"+(n-i+l)+,,)"+""+s(n, i+l)+"";}}static String An(int n){return sin(n, 1);}static String sin(int n,int i){if(i==n){return ”sin(”+n+")”;}else {if(i%2==0)return "sin("+i+"+"+sin(n z i+l)+")";//(int)Math.pow(-lJ)else {return "sin("+i+"-"+sin(n/ i+l)+,,)'^;}}}}2 2-基础练习FJ的字符串FJ在沙盘上写了这样一些字符串:Al = “A”A2 = “ABA”A3 = “ABACABA”A4 = a ABACABADABACABA v• • • • • •你能找出其屮的规律并写所有的数列AN吗?输入格式仅有一个数:N W 26。
蓝桥杯java历年真题及答案整理(参考网络资料整理出来)1.字符排序算法是这样的,如果给定N个不同字符,将这N个字符全排列,最终的结果将会是N!种。
如:给定 A、B、C三个不同的字符,则结果为:ABC、ACB、BAC、BCA、CAB、CBA一共3!=3*2=6种情况。
package Question1_9;import ;import ;public class Question1 {public static long count=0;private void fullPermutation(Vector<Character>sourse, Vector<Character> result) {if(sourse.size()==0){for (int i = 0; i < result.size(); i++) {;}"\n");count++;return;}for (int i = 0; i < sourse.size(); i++) {Vector<Character>tsourse=new Vector<Character>(sourse);Vector<Character>tresult=new Vector<Character>(result);tresult.add(sourse.elementAt(i));tsourse.remove(i);new Question1().fullPermutation(tsourse, tresult);}}public static void main(String[] args) {Scanner scanner=new Scanner(System.in);int n=scanner.nextInt();Vector<Character> sourse=new Vector<Character>();Vector<Character> result=new Vector<Character>();for (int i = 0; i < n; i++) {sourse.add((char)('A'+i));}new Question1().fullPermutation(sourse, result);;}}方法二:import ;import ;import ;import ;import ;import ;public class Demo03 {// 去掉重复元素,放入lispublic static void removeDuplicate(String s,Set<Character> lis){for(char x:s.toCharArray()){lis.add(x);}}// 为方便操作将sets 转lispublic static void convert(List<Character> lis,Set<Character> sets){Iterator<Character> iter = sets.iterator();while(iter.hasNext()){lis.add(iter.next());}}// 检测符合条件的元素组合public static void check(Set<Character> sets){List<Character> lis = new ArrayList<Character>();convert(lis,sets); // 为方便操作将sets 转lisStringBuffer sb = new StringBuffer();for(int i=0;i<lis.size()-2;i++){for(int j=i+1;j+1<lis.size();j++){ // 向后添加两位,所以j+1<lis.size() for(int k=j+1;k<lis.size();k++){sb.append(lis.get(i));sb.append(lis.get(j));sb.append(lis.get(k));; // 输出组合sb.setLength(0); // 清空}}}}public static void main(String[] args){Scanner scan = new Scanner(System.in);"输入串(不大于30个字符)。
蓝桥杯试题及答案一、选择题1. 在Java中,以下哪个关键字用于定义类?A. classB. interfaceC. enumD. struct答案:A2. 下列哪个不是Python的内置数据类型?A. intB. floatC. stringD. list答案:D二、填空题1. 在C语言中,定义一个整型变量的关键字是________。
答案:int2. 在JavaScript中,用于定义函数的关键字是________。
答案:function三、简答题1. 请简述什么是算法的时间复杂度,并给出一个例子。
答案:算法的时间复杂度是指算法执行时间随输入规模增长的变化趋势。
例如,对于一个简单的线性搜索算法,如果数组中有n个元素,最坏情况下需要比较n次,因此其时间复杂度是O(n)。
2. 请解释什么是栈,并给出一个栈的应用场景。
答案:栈是一种后进先出(LIFO)的数据结构,允许在一端进行数据的添加和删除操作。
一个常见的栈的应用场景是函数调用的实现,在编程中,每当调用一个函数,就会将函数的返回地址和局部变量压入栈中,待函数执行完毕后再从栈中弹出。
四、编程题1. 编写一个函数,实现对一个整数数组进行排序。
答案:```javapublic static void sort(int[] array) {for (int i = 0; i < array.length - 1; i++) {for (int j = 0; j < array.length - i - 1; j++) {if (array[j] > array[j + 1]) {int temp = array[j];array[j] = array[j + 1];array[j + 1] = temp;}}}}```2. 编写一个程序,实现计算一个字符串中所有元音字母的数量。
答案:```pythondef count_vowels(s):vowels = "aeiouAEIOU"return sum(1 for char in s if char in vowels)# 示例print(count_vowels("Hello World")) # 输出应该是 3```五、案例分析题1. 描述一个场景,其中使用二叉搜索树(BST)比使用数组更有效,并解释原因。
蓝桥杯(Java⽅法、详细解法分析)基础练习阶乘计算问题描述 给定n和len,输出n!末尾len位。
输⼊格式 ⼀⾏两个正整数n和len。
输出格式 ⼀⾏⼀个字符串,表⽰答案。
长度不⾜⽤前置零补全。
样例输⼊6 5样例输出00720数据规模和约定 n<=30, len<=10。
解题思路:其实很简单就是把要乘的每⼀位数放在⼀个数组⾥⾯,往百度上⾯有很多代码,但⼩编感觉最中⼼的地⽅没有写上详细的注释。
public static void main(String[] args) {int[] a = new int[300];Scanner sc = new Scanner(System.in);int n = sc.nextInt();sc.close();a[0] = 1;for(int i=2; i<=n; i++){int jw = 0; //每⼀个数组只保留⼀位数for(int j=0; j<a.length; j++){//遍历每⼀个数组,把每⼀个数组都乘以该乘的数int temp = a[j]*i + jw;//遍历数组,加上上⼀个数组进位的数a[j] = temp%10;//留下这⼀个数组的个位数再次放⼊这个数组⾥⾯jw = temp/10;//把这个数组的⼗位数赋值给jw,然后在下⼀次循环的时候放⼊下⼀个数组}}boolean begin = false;for(int i=a.length-1; i>=0; i--){if(begin){System.out.print(a[i]);continue;}if(a[i-1] != 0){begin = true;}}}。
蓝桥杯官⽹练习系统题解(⾮VIP)已攻克43道,持续更新(有我没过,你们过了的,求共享思路)...BEGIN-1(A+B问题)#include<cstdio>int main(){int a,b;//-10000 <= A, B <= 10000scanf("%d%d",&a,&b);//scanf(),printf()的int型输⼊输出printf("%d\n",a+b);return0;}View CodeBEGIN-2(序列求和)1+2+3+...+n=n*(n+1)/2#include<cstdio>int main(){long long n,sum;//n<=1000000000,int不够,需⽤long longscanf("%I64d",&n);//scanf(),printf()的long long型输⼊输出,还有⼀种情况是"%lld"printf("%I64d\n",n*(n+1)/2);//等差数列求和return0;}View CodeBEGIN-3(圆的⾯积)S=π*r*rr最⼤为10000(10000*10000=100000000),要求保留⼩数点后7位,所以PI取⼩数点后⾯16即可#include<cstdio>const double PI=3.1415926535897932;int main(){double r;//虽说输⼊是⼀个整数,但后⾯都是要转换成实数的scanf("%lf",&r);//scanf(),printf()的double型输⼊输出printf("%.7lf\n",PI*r*r);return0;}View CodeBEGIN-4(Fibonacci数列)有递推公式,⼤家都知道⽤递推公式求,只要记得在递推的时候同时取模求好这⾥给⼀份另类代码,⽤矩阵快速幂求,其实还有循环节/*(1 1) * (Fn-1) = ( Fn )//矩阵相乘,将就着看吧(1 0) (Fn-2) (Fn-1)(1 1) * (1 1) * (Fn-2) = ( Fn )(1 0) (1 0) (Fn-3) (Fn-1)F1=1,F0=0...(1 1) * ... * (1 1) * (1) = ( Fn )//共n-1个(1 1)(1 0) (1 0) (0) (Fn-1) (1 0)*/#include<cstdio>const int Mod=10007;int Z[2][2];void Matrix_Multiply(int X[][2],int Y[][2]){for(int i=0;i<2;i++){for(int j=0;j<2;j++){Z[i][j]=0;for(int k=0;k<2;k++)Z[i][j]+=X[i][k]*Y[k][j];}}}void Matrix_Copy(int *C){for(int i=0;i<2*2;i++)C[i]=Z[i/2][i%2]%Mod;}int Fast(int n){//快速求幂int B[2][2]={1,0,0,1,},A[2][2]={1,1,1,0};//B为单位矩阵while(n){if(n&1){Matrix_Multiply(B,A);Matrix_Copy(&B[0][0]);}n>>=1;Matrix_Multiply(A,A);Matrix_Copy(&A[0][0]);}return B[0][0];//B[0][0]*f1+B[0][1]*f0 (f1=1,f0=0)}int main(){int n;scanf("%d",&n);n=(n-1)%20016+1;//实验发现循环节为20016,其实在使⽤快速幂的情况下这个优化快不了多少 printf("%d\n",Fast(n-1));return0;}View CodeBASIC-1(闰年判断)#include<cstdio>bool Is(int y){if(y%4)return false;if(y%100)return true;if(y%400)return false;return true;}int main(){int y;scanf("%d",&y);printf("%s\n",Is(y)?"yes":"no");return0;}View CodeBASIC-2(01字串)回溯就好#include<cstdio>#define MAXN 5int ans[MAXN];void Print_ans(int k){for(int i=0;i<k;i++)printf("%d",ans[i]);printf("\n");}void Set_01(int k){if(k==MAXN){Print_ans(k);return;}for(int i=0;i<2;i++){ans[k]=i;Set_01(k+1);}}int main(){Set_01(0);return0;}View CodeBASIC-3(字母图形)#include<cstdio>int main(){char ans[26][26];for(int i=0;i<26;i++){//这样把最⼤图案存好就不会错了,⿊⿊ans[i][i]='A';for(int j=i+1;j<26;j++)ans[i][j]=ans[j][i]='A'+j-i;}int n,m;scanf("%d%d",&n,&m);for(int i=0;i<n;i++){for(int j=0;j<m;j++)printf("%c",ans[i][j]);printf("\n");}return0;}View CodeBASIC-4(数列特征)懒得思考了,最⼤最⼩值直接存下标了int main(){int minid,maxid,sum,n,a[10010];minid=maxid=sum=0;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&a[i]);if(a[i]>a[maxid])maxid=i;if(a[i]<a[minid])minid=i;sum+=a[i];}printf("%d\n%d\n%d\n",a[maxid],a[minid],sum);return0;}View CodeBASIC-5(查找整数)每个数都不⼤于10000,可在输⼊时储存每个数字第⼀次出现的位置,后⾯的查找就变成了O(1)#include<cstdio>int a[10010];int main(){int n,c;scanf("%d",&n);for(int i=1;i<=n+1;i++){scanf("%d",&c);if(a[c]==0)a[c]=i;}printf("%d\n",a[c]>n?-1:a[c]);//这⾥a[c]>n表⽰c只在最后输⼊查询值时出现过return0;}View CodeBASIC-6(杨辉三⾓形)不多说了,注意格式就好#include<cstdio>int main(){int n,f[35][35];scanf("%d",&n);for(int i=0;i<n;i++){f[i][0]=f[i][i]=1;for(int j=1;j<i;j++)f[i][j]=f[i-1][j-1]+f[i-1][j];for(int j=0;j<i;j++)printf("%d ",f[i][j]);printf("%d\n",f[i][i]); }return0;}View CodeBASIC-7(特殊的数字)是不是很逗#include<cstdio>int main(){printf("153\n370\n371\n407\n");return0;}View CodeBASIC-8(回⽂数)还去写什么判断语句真是弱爆了#include<cstdio>int main(){for(int i=1;i<10;i++)for(int j=0;j<10;j++)printf("%d%d%d%d\n",i,j,j,i);return0;}View CodeBASIC-9(特殊回⽂数)两份代码,后者⽐前者快#include<cstdio>int main(){int n;scanf("%d",&n);for(int i=1;i<10;i++)for(int j=0;j<10;j++){int k=n-i*2-j*2;if(k>=0 && k<10)printf("%d%d%d%d%d\n",i,j,k,j,i);}if(n%2==0){n/=2;for(int i=1;i<10;i++)for(int j=0;j<10;j++){int k=n-i-j;if(k>=0 && k<10)printf("%d%d%d%d%d%d\n",i,j,k,k,j,i);}}return0;}View Code#include<cstdio>int main(){int n;scanf("%d",&n);for(int i=1;i<=n/2&&i<10;i++)for(int j=0;j<=n/2-i&&j<10;j++){int k=n-i*2-j*2;if(k<10)printf("%d%d%d%d%d\n",i,j,k,j,i);}if(n%2==0){n/=2;for(int i=1;i<=n&&i<10;i++)for(int j=0;j<=n-i&&j<10;j++){int k=n-i-j;if(k<10)printf("%d%d%d%d%d%d\n",i,j,k,k,j,i);}}return0;}View CodeBASIC-10(⼗进制转⼗六进制)#include<cstdio>int main(){int n;scanf("%d",&n);printf("%X\n",n);//注意Xreturn0;}View CodeBASIC-11(⼗六进制转⼗进制)#include<cstdio>int main(){long long n;scanf("%I64X",&n);printf("%I64d\n",n);return0;}View CodeBASIC-12(⼗六进制转⼋进制)⼀位16进制对应四位2进制,⼀位8进制对应三位2进制,三位16进制对应四位8进制(也可以六位对应⼋位....)#include<cstdio>#include<cstring>int getnu(char c){if(c>='0' && c<='9')return c-'0';return c-'A'+10;}void putans(char *s){int ans=0;for(int i=0;i<3;i++)ans=ans*16+getnu(s[i]);printf("%04o",ans);}int main(){int n;char a[100010];scanf("%d",&n);for(int i=0;i<n;i++){scanf("%s",a);int len=strlen(a);int flen=(len-1)%3+1;int ans=0;for(int i=0;i<flen;i++)ans=ans*16+getnu(a[i]);printf("%o",ans);for(int j=flen;j<len;j+=3)putans(a+j);printf("\n");}return0;}View CodeBASIC-13(数列排序)你们⽼师有没有教sort(),我们⽼师没有#include<cstdio>#include<algorithm>using namespace std;int main(){int a[210],n;scanf("%d",&n);for(int i=0;i<n;i++)scanf("%d",&a[i]);sort(a,a+n);for(int i=0;i<n-1;i++)printf("%d ",a[i]);printf("%d\n",a[n-1]); return0;}View CodeALGO-1(区间k⼤数查询)排序啊排序#include<cstdio>#include<algorithm>using namespace std;#define MAXN 1010struct Element{int v,id;}e[MAXN];bool Cmp(Element x,Element y){return x.v>y.v;}bool Recmp(Element x,Element y){return x.id<y.id;}int main(){int n,m,l,r,k;//n,m最⼤为1000,sort()最坏情况为O(nlogn) scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&e[i].v);e[i].id=i;}scanf("%d",&m);for(int i=0;i<m;i++){//O(m*n*logn)<=10^7scanf("%d%d%d",&l,&r,&k);sort(e+l,e+r+1,Cmp);//按⼤到⼩排序printf("%d\n",e[l+k-1]);sort(e+l,e+r+1,Recmp);//按原数组下标从⼩到⼤排序 }return0;}View CodeALGO-2(最⼤最⼩公倍数)不纠结,题⽬数据有问题顺带提:此题是丽洁桑⾼中时在CF上出的题146A#include<cstdio>//1-n中取三个数int main(){long long n,ans;scanf("%I64d",&n);if(n<3)ans=n;else{if(n&1)ans=n*(n-1)*(n-2);else{if(n%6==0)ans=(n-1)*(n-2)*(n-3);else ans=n*(n-1)*(n-3);}}printf("%I64d\n",ans);return0;}View CodeALGO-3(K好数)DP 先存下第n-1位为0-(k-1)分别的个数,根据第n-1位为0-(k-1)的个数推出第n位为0-(k-1)的个数,最后对第L位的0-(k-1)分别的个数求和#include<cstdio>#include<cmath>using namespace std;const int Mod=1000000007;int main(){int k,l,dp[110][110]={0},ans=0;scanf("%d%d",&k,&l);if(l<2)ans=k*l;//我觉得这⾥的k不应该减⼀,但是题⽬中这⾥的k需要减掉1才能过掉第⼀组数据(好坑)else{dp[0][1]=0;for(int i=1;i<k;i++)dp[i][1]=1;for(int j=2;j<=l;j++){for(int i=0;i<k;i++){for(int h=0;h<k;h++){if(abs(h-i)!=1)dp[i][j]=(dp[i][j]+dp[h][j-1])%Mod;//abs()=1时表⽰是相邻的数字}}}for(int i=0;i<k;i++){ans=(ans+dp[i][l])%Mod;}}printf("%d\n",ans);return0;}View CodeALGO-4(节点选择)树形DP 从图中任选⼀点作为根节点,得到⽣成树,再在⽣成树上从叶⼦节点向上DP#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define MAXN 100010int Head[MAXN],Head0[MAXN],n,V[MAXN],D[MAXN],Son[MAXN],GSon[MAXN],mk=0;bool f[MAXN];struct EdgeNode{int to,next;}Edges[MAXN],Edges0[MAXN<<1];void DFS(int s){//递归int k=Head[s];D[s]=V[s];while(k>=0){if(D[Edges[k].to]<0)DFS(Edges[k].to);Son[s]+=D[Edges[k].to];GSon[s]+=Son[Edges[k].to];k=Edges[k].next;}D[s]=max(D[s]+GSon[s],Son[s]);}void GtoT(int u){//⽣成树int k=Head0[u];while(k>=0){if(!f[Edges0[k].to]){f[Edges0[k].to]=true;Edges[mk].to=Edges0[k].to;Edges[mk].next=Head[u];Head[u]=mk;mk++;GtoT(Edges0[k].to);}k=Edges0[k].next;}}void Swap(int &a,int &b){int c=a;a=b;b=c;}int main(){int u,v;scanf("%d",&n);memset(Head,-1,sizeof(Head));memset(Head0,-1,sizeof(Head0));memset(D,-1,sizeof(D));memset(Son,0,sizeof(Son));memset(GSon,0,sizeof(GSon));for(int i=1;i<=n;i++)scanf("%d",&V[i]);for(int i=0;i<2*n-2;i++){//⽣成图,双向scanf("%d%d",&u,&v);Edges0[i].to=v;Edges0[i].next=Head0[u];Head0[u]=i++;Swap(u,v);Edges0[i].to=v;Edges0[i].next=Head0[u];Head0[u]=i;}memset(f,false,sizeof(f));f[1]=true;//图中任选⼀点,这⾥选结点1GtoT(1);DFS(1);printf("%d\n",D[1]);return0;}View CodeALGO-5(最短路)存在负边所以不能⽤Dijkstra,SPFA⽐Bellman-Ford快,⾚裸裸的套模版#include<cstdio>#include<cstring>#define MAXN 20010#define MAXM 200010#define INF 200000int Head[MAXN],n,m,Dist[MAXN];struct EdgeNode{int to,w,next;}Edges[MAXM];void SPFA(int s){//题⽬说不存在负环,所以没实现判断负环存在功能int Que[MAXN],Iq=0;bool Visit[MAXN];for(int i=0;i<=n;i++)Dist[i]=INF;memset(Visit,false,sizeof(Visit));Dist[s]=0;Visit[s]=true;Que[Iq++]=s;int Id=0;while(Id!=Iq){int top=Que[Id];Visit[top]=false;int k=Head[top];while(k>=0){if(Dist[Edges[k].to]>Edges[k].w+Dist[top]){Dist[Edges[k].to]=Edges[k].w+Dist[top];if(!Visit[Edges[k].to]){Que[Iq++]=Edges[k].to;Visit[Edges[k].to]=true;}}k=Edges[k].next;}Id++;}}int main(){int u,v,l;scanf("%d%d",&n,&m);memset(Head,-1,sizeof(Head));for(int i=0;i<m;i++){//链式前向星建图scanf("%d%d%d",&u,&v,&l);Edges[i].to=v;Edges[i].w=l;Edges[i].next=Head[u];Head[u]=i;}SPFA(1);for(int i=2;i<=n;i++)printf("%d\n",Dist[i]);return0;}View CodeALGO-6(安慰奶⽜)题⽬关键在于如何转换成构建最⼩⽣成树的形式假如现在我们已经⽣成了最⼩⽣成树,不难发现:1.⼀个节点有⼏个度,就需要访问该节点(牧场)的奶⽜⼏次+访问⼀次过夜牧场的奶⽜2.每条边(路)都要⾛两次如此便可进⾏转换:每条边的权可改为:⾛该条路需要的时间*2+路两端的奶⽜交谈需要的时间即:Li*2+C[Si]+C[Ei]然后运⾏⼀遍最⼩⽣成树过夜牧场⾃然选择与奶⽜交谈时间最少的#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int MAXM=100010;const int MAXN=10010;int f[MAXN];int find(int x){if(f[x]==x)return x;return find(f[x]);}void Merge(int x,int y){f[y]=x;}struct Edge{int a,b,v;}e[MAXM];bool cmp(Edge a,Edge b){return a.v<b.v;}int main(){int ans=0,k=1,N,P,C[MAXN];scanf("%d%d",&N,&P);for(int i=1;i<=N;i++){scanf("%d",&C[i]);if(C[i]<C[k])k=i;//选择过夜牧场}ans+=C[k];for(int i=0;i<P;i++){scanf("%d%d%d",&e[i].a,&e[i].b,&e[i].v);e[i].v<<=1;//边权重构e[i].v+=C[e[i].a]+C[e[i].b];}sort(e,e+P,cmp);k=0;for(int i=1;i<=N;i++)f[i]=i;for(int i=0;i<P;i++){//Kruskalint x=find(e[i].a);//并查集int y=find(e[i].b);if(x!=y){k++;ans+=e[i].v;Merge(x,y);}if(k==N-1)break;}printf("%d\n",ans);return0;}View CodeALGO-7(逆序对)平衡树,SBT;外加⼀些分治,回溯思想,⼀顿胡搞。
蓝桥杯2022年java试题基础练习⼀:基础练习:(本⽂只附代码,解析后续修改后添上) 1.a+b问题: 代码如下:1 1 import java.util.*;2 2 public class Main {3 3 public static void main(String args[]) {4 4 int a,b;5 56 6 Scanner input = new Scanner(System.in);7 7 a = input.nextInt();8 8 b = input.nextInt();9 910 10 System.out.println(a+b);11 11 }12 12 }View Code 2.序列排序问题: 代码如下:1 1 import java.util.Arrays;2 2 import java.util.Scanner;3 34 4 public class Main {5 5 public static void main(String[] args) {6 6 Scanner scanner = new Scanner(System.in);7 7 int n = scanner.nextInt();8 8 int[] arr = new int[n];9 9 //往数组添加元素,接收数据10 10 for (int i = 0; i < n; i++) {11 11 arr[i] = scanner.nextInt();12 12 }13 1314 14 //对数组排序15 15 Arrays.sort(arr);16 1617 17 //打印数组18 18 for (int i = 0; i < n; i++) {19 19 System.out.print(arr[i] + " ");20 20 }21 21 }22 22 }View Code 3.⼗六进制转⼋进制: 代码如下:1import java.util.Scanner;2public class Main {3public static void main(String[] args) {4 Question1();56 }8 Scanner in = new Scanner(System.in);9int n = Integer.parseInt(in.nextLine());10int i, j;11 String[] sz = new String[n];12//读⼊⼗六进制数13for (i = 0; i < n; i++) {14 sz[i] = in.next();15 }16for(i = 0; i < sz.length; i++) {17 String s = sz[i];18 StringBuilder sb = new StringBuilder();19//将⼀位⼗六进制数转换为四位⼆进制数 20for(j = 0; j < s.length(); j++) {21switch(s.charAt(j)) {22case '0':23 sb.append("0000");24break;25case '1':26 sb.append("0001");27break;28case '2':29 sb.append("0010");30break;31case '3':32 sb.append("0011");33break;34case '4':35 sb.append("0100");36break;37case '5':38 sb.append("0101");39break;40case '6':41 sb.append("0110");42break;43case '7':44 sb.append("0111");45break;46case '8':47 sb.append("1000");48break;49case '9':50 sb.append("1001");51break;52case 'A':53 sb.append("1010");54break;55case 'B':56 sb.append("1011");57break;58case 'C':59 sb.append("1100");60break;61case 'D':62 sb.append("1101");63break;64case 'E':65 sb.append("1110");66break;67case 'F':68 sb.append("1111");69break;70 }71 }72//再将⼆进制数转换成⼋进制数73 transform(sb);74 }7576 }77public static void transform(StringBuilder sb) { 78int num = sb.length() % 3;79//判断长度是否为3的倍数80switch(num) {81case 0:82//若转换的⼋进制数中第⼀位为0则删去 83if(sb.substring(0, 3).equals("000"))84 sb.delete(0, 3);85break;86case 1:87if(sb.substring(0, 1).equals("0"))88 sb.delete(0, 1);89else sb = sb.insert(0, "00");92if(sb.substring(0, 2).equals("00"))93 sb.delete(0, 2);94else sb = sb.insert(0, "0");95break;96 }97 StringBuilder res = new StringBuilder();98int len = sb.length();99 String[] new_s1 = new String[len/3];100//取三位转换成⼋进制数101for(int i = 0; i < len/3; i++) {102int tmp = Integer.parseInt(sb.substring(i * 3, i * 3 + 3), 2); 103 res.append(tmp);104 }105 System.out.println(res);106 }107 }View Code4.⼗六进制转⼗进制: 代码如下:1import java.util.Scanner;2public class Main {3public static void main(String[] args) {4 Scanner scanner = new Scanner(System.in);5 String string = scanner.nextLine();6 System.out.print(Long.parseLong(string, 16));7 }8 }View Code5.⼗进制转⼗六进制: 代码如下:1import java.util.Scanner;2public class Main {3public static void main(String[] args) {4 Scanner input = new Scanner(System.in);5 one(input.nextInt());67 }89public static void one(int a){10int b;11if(a<=15) {12 tohax(a);13// System.out.print(a);1415 }16else{17 b=a%16;18 one(a>>4);19 tohax(b);20// System.out.print(b);21 }22 }23public static void tohax(int c){24switch (c){25default:26 System.out.print(c);27break;2829case 10:30 System.out.print("A");31break;32case 11:35case 12:36 System.out.print("C");37break;38case 13:39 System.out.print("D");40break;41case 14:42 System.out.print("E");43break;44case 15:45 System.out.print("F");46break;4748 }49 }50 }View Code6.特殊的回⽂数: 代码如下:1import java.util.Scanner;23public class Main {4final static byte one = 1;//常量1.5final static byte two = 2;//常量2.6final static byte ten = 10;//常量10;78//输⼊:正整数n。
蓝桥杯练习系统题目汇总:入门训练1. Fibonacci数列问题描述Fibonacci数列的递推公式为:F n=F n-1+F n-2,其中F1=F2=1。
当n比较大时,F n也非常大,现在我们想知道,F n除以10007的余数是多少。
输入格式输入包含一个整数n。
输出格式输出一行,包含一个整数,表示F n除以10007的余数。
说明:在本题中,答案是要求F n除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出F n的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。
样例输入10样例输出55样例输入22样例输出7704数据规模与约定1 <= n <= 1,000,000。
参考代码:c++1.#include<stdlib.h>2.#include<stdio.h>3.#define MOD 100074.#define MAXN 10000015.int n, i, F[MAXN];6.int main()7.{8.scanf("%d", &n);9.F[1] = 1;10.F[2] = 1;11.for(i = 3; i <= n; ++i)12.F[i] = (F[i-1] + F[i-2]) % MOD;13.printf("%d\n", F[n]);14.return0;15.}java:1.import java.util.Scanner;2.public class Main{3.public static void main(String[] args) {4.Scanner scanner = new Scanner(System.in) ;5.int num = scanner.nextInt() ;6.int[] a = new int[num+2] ;7.a[1] = a[2] = 1;8.if(num == 1) {9.a[num] = 1 ;10.}else if(num == 2) {11.a[num] = 1 ;12.}else{13.for(int i = 3; i <= num; i++) {14.a[i] = (a[i - 1] + a[i - 2]) % 10007 ;15.}16.}17.System.out.println(a[num]);18.}19.}2. 实数输出问题描述给定圆的半径r,求圆的面积。
30 import java.math.BigInteger; import java.util.*; public class Main{ protected static ArrayList table = new ArrayList(); static { table.add(BigInteger.valueOf(1)); } public static synchronized BigInteger factorial(int x) { for (int size = table.size(); size <= x; size++) { BigInteger lastfact = (BigInteger) table.get(size - 1); BigInteger nextfact = lastfact.multiply(BigInteger.valueOf(size)); table.add(nextfact); } return (BigInteger) table.get(x); } public static void main(String[] args) { Scanner s=new Scanner(System.in); int n=s.nextInt(); System.out.print(factorial(n)); } }
29 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main{ public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String s1 = br.readLine(); String s2 = br.readLine(); int a[] = new int[100000]; int b[] = new int[100000]; int l1 = s1.length(); int l2 = s2.length(); for(int i=0; ia[l1-1-i] = Character.getNumericValue(s1.charAt(i)); } for(int i=0; ib[l2-1-i] = Character.getNumericValue(s2.charAt(i)); } int max = l1>l2?l1:l2; int c[] = new int[100000]; for(int i=0; ic[i] = a[i] + b[i]; } for(int i=0; iif(c[i]>9){ c[i+1] += c[i]/10; c[i] = c[i]%10; } } while(c[max-1]>9){ c[max] = c[max-1]/10; c[max-1] = c[max-1]%10; max++; } for(int i=max-1; i>=0; i--){ System.out.print(c[i]); } } } 28 import java.io.*; import java.math.BigInteger; public class Main { public static void main(String[] args)throws IOException { BufferedReader buf=new BufferedReader(new InputStreamReader(System.in)); int n=Integer.parseInt(buf.readLine()); String str=buf.readLine(); String s[]=str.split(" "); int sum=0; int a[] =new int[n]; int num=0; for(int i=0;ia[i]=Integer.parseInt(s[i]); java.util.Arrays.sort(a);
if(n>1){ sum=a[0]+a[1]; num=sum; a[1]=num; for(int j=2;jif(jjava.util.Arrays.sort(a); num=a[j-1]+a[j]; a[j]=num; java.util.Arrays.sort(a); sum+=num; }
} } else {
sum=a[0]; } System.out.println(sum);
} } 27 import java.util.Scanner;
public class Main { public static int n = 0; public static int a[] = new int[10]; public static int isa[][] = new int[10][10]; public static boolean flag = false; public static int sum = 0;
public static boolean judge(int k) { for (int j = 1; j < k; j++) { if (Math.abs(j - k) == Math.abs(a[j] - a[k]) || a[j] == a[k]) return false; } return true; }
public static void place(int t) { if (t > n && !flag) { flag = true; place(1); flag = false; } else if (t > n && flag) { sum++; } else { for (int i = 1; i <= n; i++) { if (isa[t][i] == 1) { int temp = a[t]; a[t] = i; if (judge(t)) { isa[t][i] = 2; place(t + 1); isa[t][i] = 1; } a[t] = temp; } } } }
public static void main(String[] args) { Scanner sc = new Scanner(System.in); n = sc.nextInt(); for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { isa[i][j] = sc.nextInt(); } } place(1); System.out.println(sum); } } 26 import java.io.*; public class Main { public static void main(String[] args)throws IOException { BufferedReader buf=new BufferedReader(new InputStreamReader(System.in)); String str=buf.readLine(); String s[]=str.split(" "); StringBuffer bf=new StringBuffer(); int i=Integer.parseInt(s[0]); int n=Integer.parseInt(s[1]); switch(i){ case 0:{ bf.append("zero "); break; } case 1:{ bf.append("one "); break; } case 2:{ bf.append("two "); break; } case 3:{ bf.append("three "); break; } case 4:{ bf.append("four "); break; } case 5:{ bf.append("five "); break; } case 6:{ bf.append("six "); break; } case 7:{ bf.append("seven "); break; } case 8:{ bf.append("eight "); break; } case 9:{ bf.append("nine "); break; } case 10:{ bf.append("ten "); break; } case 11:{ bf.append("eleven "); break; } case 12:{ bf.append("twelve "); break; }