演算法-藍橋杯習題(4-3)
阿新 • • 發佈:2018-12-27
藍橋杯習題
藍橋杯練習系統習題加答案,總共分為6部分,90%習題使用C語言解答,部分使用C++或者Java。大部分習題為搜尋參考或者別人提供所得,不足之處在所難免,懇請批評指正(預計200多題,習題僅供學習交流)目錄
藍橋杯練習系統評測資料
10
/* 演算法提高 多項式輸出 */ //多項式輸出 #include<stdio.h> int main() { int n,a[101],i; scanf("%d",&n); for(i=n;i>=0;i--) scanf("%d",&a[i]); for(i=n;i>=0;i--) { if(i==n) //指數為首位 { //係數大於0且等於1 if(a[i]>0 && a[i]!=1) printf("%dx^%d",a[i],i); //係數大於0且等於1 if(a[i]>0 && a[i]==1) printf("x^%d",i); //係數小於0且不等於-1 if(a[i]<0 && a[i]!=-1) printf("%dx^%d",a[i],i); //係數小於0且等於-1 if(a[i]<0 && a[i]==-1) printf("-x^%d",i); } else if(i>1 && i!=n) //指數不為0 且不為首位 { //係數大於0且不等於1 if(a[i]>0 && a[i]!=1) printf("+%dx^%d",a[i],i); //係數大於0同時等於1 if (a[i]>0 && a[i]==1) printf("+x^%d",i); //係數小於0且不等於-1 if(a[i]<0 && a[i]!=-1) printf("%dx^%d",a[i],i); //係數小於0同時等於-1 if(a[i]<0 && a[i]==-1) printf("-x^%d",i); } else if(i==1) { //係數大於0且不等於1 if(a[i]>0 && a[i]!=1) printf("+%dx",a[i]); //係數大於0同時等於1 if (a[i]>0 && a[i]==1) printf("+x"); //係數小於0且不等於-1 if(a[i]<0 && a[i]!=-1) printf("%dx",a[i]); //係數小於0同時等於-1 if(a[i]<0 && a[i]==-1) printf("-x"); } else //指數為0 { if(a[i]>0) printf("+%d\n",a[0]); else if(a[i]<0) printf("%d\n",a[0]); } } printf("\n"); return 0; }
/* 演算法提高 矩陣乘方 */ #include <stdio.h> int b, m; int a[2][2], ans[2][2], temp[2][2] = {1,1,1,1}; void play() { int cnt, cnt2; for(cnt = 0; cnt < 2; ++cnt) { for(cnt2 = 0; cnt2 < 2; ++cnt2) { printf("%d ", ans[cnt][cnt2]); } printf("\n"); } } void cp(int arr1[][2], int arr2[][2]) { int cnt, cnt2; for(cnt = 0; cnt < 2 ;++cnt) for(cnt2 = 0; cnt2 < 2; ++cnt2) arr1[cnt][cnt2] = arr2[cnt][cnt2]; } void mod(int arr[][2]) { int cnt, cnt2; for(cnt = 0; cnt < 2; ++cnt) for(cnt2 = 0; cnt2 < 2; ++cnt2) arr[cnt][cnt2] %= m; } void fun2(int a[][2], int b[][2]) { int cnt, cnt2; temp[0][0] = a[0][0]*b[0][0]+a[0][1]*b[1][0]; temp[0][1] = a[0][0]*b[0][1]+a[0][1]*b[1][1]; temp[1][0] = a[1][0]*b[0][0]+a[1][1]*b[1][0]; temp[1][1] = a[1][0]*b[0][1]+a[1][1]*b[1][1]; } void fun(int arr[][2], int k) { int cnt; if(k == 0) { mod(temp); cp(ans, temp); return; } if(k == 1) { mod(ans); return; } if(k == 2) { fun2(a, a); cp(ans, temp); // printf("2\n"); // play(); mod(ans); return; } if(k%2 == 0) { fun(arr, k/2); fun2(ans, ans); cp(ans, temp); //printf("=0\n"); //play(); mod(ans); return; } if(k%2 != 0) { fun(arr, k-1); fun2(ans, arr); cp(ans, temp); //printf("!=0\n"); // play(); mod(ans); return; } } int main() { int cnt, cnt2; scanf("%d%d", &b, &m); for(cnt = 0; cnt < 2; ++cnt) for(cnt2 = 0; cnt2 < 2; ++cnt2) { scanf("%d", &a[cnt][cnt2]); ans[cnt][cnt2] = a[cnt][cnt2]; } fun(a, b); play(); return 0; }
/* 演算法提高 奪寶奇兵 */ //奪寶奇兵 #include<stdio.h> int max(int a,int b) { return a>b?a:b; } int main() { int N,i,j; int a[101][101]={0}; int f[101][10]={0}; scanf("%d",&N); for(i=1;i<=N;i++) for(j=1;j<=i;j++) scanf("%d",&a[i][j]); for(i=N;i>=0;i--) for(j=1;j<=i;j++) { f[i][j]=max( f[i+1][j],f[i+1][j+1] )+a[i][j]; } printf("%d\n",f[1][1]); return 0; }
/*
演算法提高 利息計算
*/
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
double x,n;
double sum=0;
scanf("%lf",&x);
scanf("%lf",&n);
sum=x+(x*(n/100)*0.8);
printf("%.2lf",sum);
return 0;
}