JSU省赛队员选拔赛个人赛1(Coin Change、Fibbonacci Number、Max Num、单词数、无限的路、叠筐)
JSU省赛队员选拔赛个人赛1
一、题目概述:
A、Coin Change(暴力求解、动态规划)
B、Fibbonacci Number(递推求解)
C、Max Num(排序、比较)
D、单词数(字符串比较、库函数运用)
E、无限的路(平面几何)
F、叠筐(规律输出)
二、解题报告:
A、Coin Change
给一个钱的总金额,求出用100个以内的50分、25分、10分、5分、1分硬币拼成该金额的不同拼法。
直接暴力,打表什么的都是浮云。开始总觉得用暴力求解显得自己没风度,不够高端霸气上档次。当面临各种WA时,什么都是浮云,唯有AC才是王道。
用i,j,k,x,y分别表示50分、25分、10分、5分、1分硬币的数量,用四重循环直接暴力(不用五层。剩下的变量直接可以求得)。当y=n-x*5-k*10-j*25-i*50;并且y不小于0,硬币总数不大于100的时候,表示这种拼法是可以的,计数变量sum自加一,最后直接输出计数变量即可。
#include<stdio.h>int main(){ //freopen("in.txt","r",stdin); int n,i,j; char a[2],b[2],c; char pi[85][85]; int f=0; while(scanf("%d%s%s",&n,a,b)!=EOF) { if(f)printf("\n"); //案例间的换行 if(n==1) //要是只有1个 printf("%c\n",a[0]); else { c=a[0]; for(i=n/2; i>=0; i--) //从里到外(填充) { for(j=i; j<=n-i-1; j++) { pi[i][j]=c; //上面一行 pi[n-i-1][j]=c; //下面一行 pi[j][i]=c; //左边一列 pi[j][n-i-1]=c; //右边一列 } if(c==a[0])c=b[0]; //更换“填充物” else c=a[0]; } //pi[n/2][n/2]=a[0]; for(i=0; i<n; i++) { for(j=0; j<n; j++) { if((i==0&&j==0)||(i==0&&j==n-1)||(i==n-1&&j==0)||(i==n-1&&j==n-1)) //“剪角” printf(" "); else printf("%c",pi[i][j]); } printf("\n"); } } f=1; } return 0;}