1-
已知FIBONACCI数列的定义为:F1 = 1, F2 = 1, n > 2时, Fn = Fn - 1 + Fn - 2,请编程验证:任意的正整数可表示为若干个不同的FIBONACCI数之和。例如,45可以表示为45 = 34 + 8 + 3(即F9 + F5 + F3)
输入:重复地从键盘上读入一个正整数N(<=10000)
输出:将其表示为不同的FIBONACCI数之和。
重复上述工作,直到读入的数为0
提示:F21 = 10946
#include<stdio.h>
int fbn[22]={0};
void get_fbn(){
fbn[1]=1;
fbn[2]=1;
for(int i=3;i<22;i++){
fbn[i]=fbn[i-1]+fbn[i-2];
}
}
bool is_fbn(int n){
for(int i=1;i<22;i++){
if(fbn[i]==n){
return true;
}
}
return false ;
}
int main(){
get_fbn();
int n;
while(scanf("%d",&n),n!=0){
if(is_fbn(n)){
printf("%d\n",n);
}
while(!is_fbn(n)){
for(int i=21;i>=0;i--){
if(fbn[i]<=n){
printf("%d+",fbn[i]);
n-=fbn[i];
break;
}
}
}
printf("%d\n",n);
}
return 0 ;
}
2-打印杨辉三角形前K行(K<=9)
#include<stdio.h>
int main(){
int n,i,j,k;
int data[20][20];
scanf("%d",&n);
for(i=0;i<n;i++){
for(k=0;k<n-i;k++){
printf(" ");
}
for(j=0;j<=i;j++){
if(j==0||j==i){
data[i][j]=1;
}
else{
data[i][j]=data[i-1][j-1]+data[i-1][j];
}
printf("%4d ",data[i][j]);
}
printf("\n");
}
return 0 ;
}
3-调整N阶方阵列主元,重复地读入一个N(<=10)阶方阵A(A所有元素为正整数),对A做如下操作:
a)将A第一列中最大数所在的行与第一行对调;
b)将A第二列中从第二行到第N行中最大数所在的行与第二行对调;
c)… … … … … … …
d)将A第N - 1列中从第N - 1行到第N行中最大数所在的行与第N - 1行对调。
e)输处调整后的矩阵
输入:每组数据的第一行为一正整数n(<= 10),后跟n行数据,每行n个正整数(用空格隔开)。若n = 0,则表示输出结束,程序终止。
输出:将每组数据所表示的矩阵调整后输出。
#include<stdio.h>
const int maxn=10;
int mat[maxn][maxn]={0};
int ans[maxn]={0};
int n;
void init(int n){
for(int i=0;i<n;i++){
ans[i]=i;
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
scanf("%d",&mat[i][j]);
}
}
}
void exchange(int i,int j){
for(int k=0;k<n;k++){
int t=mat[i][k];
mat[i][k]=mat[j][k];
mat[j][k]=t;
}
}
int main(){
scanf("%d",&n);
init(n);
for(int i=0;i<n-1;i++){
int max_val=0;
int max_num=0;
for(int j=i;j<n;j++){
if(mat[i][j]>max_val){
max_val=mat[i][j];
max_num=j;
}
}
exchange(i,max_num);
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
printf("%d",mat[ans[i]][j]);
}
printf("\n");
}
return 0 ;
}
4-
#include<stdio.h>
#include<string.h>
int main(){
char a[100],b[100];
char ret[300];
int la,lb,l,i,j,k;
gets(a);
gets(b);
la=strlen(a);
lb=strlen(b);
l=la+lb;
j=0;
k=lb-1;
for(i=1;i<=l;i++){
if((j<=la-1)&&(k>=0)){
if(i%2!=0){
ret[i]=a[j];
j++;
}
else{
ret[i]=b[k];
k--;
}
}
else if((j>la-1)&&(k>=0)){
ret[i]=b[k];
k--;
}
else if((k<0)&&(j<=la-1)){
ret[i]=a[j];
j++;
}
}
for(i=1;j<=l;i++){
printf("%c",ret[i]);
}
printf("\n");
return 0 ;
}