doubleyong
管理员
管理员
  • 最后登录2022-01-18
  • 发帖数1052
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
阅读:156回复:0

c语言算法题

楼主#
更多 发布于:2021-12-29 10:16
( c语言不是太熟悉,代码有问题的,或者有更好的实现方法,欢迎留言^_^ )


1、编写程序实现输出_100 元人民币兑换成1元、2元、5元的所有兑换方案。提示,1*x+2*y+5*z=100,其中x,y,z为非负整数。
int main(){
   int five =0,two=0,one=0,count = 0;
   for(five = 0; five<=20 ; five++){
        for(two = 0 ; two<=50;two++){
            if(five*5+two*2<=100){
                one = 100 - five*5 - two*2;
                count++;
                printf("1元、2元、5元的数量分别为:%d,%d,%d\r\n",one,two,five);
            }
        }
    }
   printf("共%d种方法",count);
   return 0;
}


2、编写程序实现对给定的某年某月某日,计算并输出它是这一年的第几天。给定的日期从键盘输入
int main(){
    int year,month,day;
    printf("请输入年,月,日");
    scanf("%d-%d-%d",&year,&month,&day);
    printf("%d,%d,%d",year,month,day);
    printf("这是这一年的第%d天",DayofYear(year,month,day));
    return 0;
}
int DayofYear(int year,int month, int day){
   int m[12]={31,28,31,30,31,30,31,31,30,31,30,31};
   int total=day;
   int i;
   for(i=0;i<month-1;i++){
    total+=m[i];
   }
   if(month>2){//大于才会涉及到判断是否为闰年
    //判断是否为闰年
    if(year%4==0&&year%100!=0||year%400==0){
        total++;
    }
   }
   return total;//返回第多少天
   }


3. 编写程序计算如下式子: cos(x)~1-x/2!+x4/4! - x6%6! +...,要求最后一项的绝对值小于1e-5为止
#include <stdio.h>
#include <math.h>
int main(){
 float x;
 int n=0;
 double fen=1,mu=1,sum=1,single = 1;
 printf("请输入x的值");
 scanf("%f",&x);
 while(fabs(single)>1e-5){
    fen = (-1)*x*x;
    mu = mu*(n+1)*(n+2);
    single = fen / mu;
    sum += single;
    n+=2;
 }
 printf("cosx的值为%f",sum);
 return 0;
}


4.编写程序实现将一个4×4的数组进行顺时针旋转90度后输出。要求,原始数组的数据从键盘随机输入,新数组以4行4列的方式输出
#include <stdio.h>
int main(){
int a[4][4],b[4][4];
int i,j;
// 接受一个4x4的矩阵
for(i=0;i<4;i++){
    printf("请第%d行的4位数:\n",(i+1));
    for( j=0;j<4;j++){
       scanf("%d",&a[i][j]);
    }
}
for(i=0;i<4;i++){
    for(j=0;j<4;j++){
        b[j][i]=a[i][j];
    }
}
  // 输出旋转后的矩阵
  for(i=0;i<4;i++){
    printf("%d %d %d %d\n",b[i][0],b[i][1],b[i][2],b[i][3]);
  }
  return 0;
}


5. 编写程序实现在一个按照升序排序的数组中查找x应插入的位置,并将x插入数组中,使得数组元素仍按照升序排列,输出插入后的数组。原数组和x值由键盘输入,插入操作用函数实现。
#include <stdio.h>
int main(){
  int arr[7] = {2,45,67,77,89,110};
  int x,i;
  int index = -1; //x的位置
  int len = sizeof(arr) / sizeof(arr[0]);
  printf("请输入要插入的x:");
  scanf("%d",&x);
  for(i=0;i<len;i++){
    if(x<arr[i]){
        index = i; // 当前的i,即为x要插入的位置
        break;
    }
  }
  if(index!=-1){
      for(i=len-1;i>index;i--){
        arr[i] = arr[i-1];
      }
      arr[index]=x;
  }
  else{ // x比数组中所有的数都大
    arr[len-1]=x;
  }
  printf("插入x后的数据排列顺序:\n");
 // len = sizeof(arr) / sizeof(arr[0]);
  for(i=0;i<len;i++){
    printf("%4d",arr[i]);
  }
return 0;
}

6. 设计程序实现以下功能:在键盘上输入一个十进制正整数,将该数转换为其对应的二进制数,并在屏幕上输出
#include <stdio.h>
int main(){
    int num,i;
    printf("请输入一个数");
    scanf("%d",&num);
    int count = 0;
    int bit[64];
    while(num>=2){
        bit[count]=num%2;
        num=num/2;
        count++;
    }
    bit[count]=num;
    printf("对应二进制为:");
    for(i=count;i>=0;i--){
        printf("%d",bit[i]);
    }
    return 0;
}

7.鸡兔同笼:已知笼里共有35个头,94条腿,请设计程序计算出该笼里鸡、兔分别有多少只
#include <stdio.h>
int main(){
    int ji,tu;
    for(ji=0;ji<35;ji++){
        tu = 35-ji;
        if(ji*2+tu*4==94){
            printf("鸡的数量为:%d,兔的数量有:%d",ji,tu);
        }
    }
return 0;
}

8.已知一个整数有序序列,请设计程序实现以下功能:对任意输入的整数x,查找x是否在该序列中,如果查找成功,则输出x在序列中的位置,否则输出“查找失败”的提示。

注:有序序列,程序中指升序;如果是降序,方法不一样
#include <stdio.h>
int main(){
   int arr[7]={12,33,46,67,78,99,110}; //这里采用升序
   int len = sizeof(arr)/sizeof(int);
   int num,i,result=-1;
   printf("请输入你要查找的数");
   scanf("%d",&num);
   for(i=0;i<len;i++){
    if(num==arr[i]){
        result = i;
        break;
    }else if(num<arr[i]){
        break; // 因为是有充列的不需要判断了
    }
   }
  if(result==-1){
    printf("查找失败");
  }else{
    printf("查找成功,对应位置为:%d",result);
  }
return 0;
}

9.输入一字符串,检查是否为回文,若是则输出“回文”,否则输出“非回文”

回文字符串:是一个正读和反读都一样的字符串。如:LeveL
#include <stdio.h>
#include <string.h>
int main(){
 char str1[200] = "\0";
 gets(str1);
 int i,j;
 int flag=0;
 for( i=0,j=strlen(str1)-1;i<j;i++,j--){
    if(str1[i]!=str1[j]){
            flag=1;
        break;
    }
 }
 printf("%s\n",flag==1?"不是回文":"是回文");
  return 0;
}


10. 计算e = 1 + 1/1!  + 1/2! + ... + 1/n!的值并输出(设n=15)
#include <stdio.h>
int main(){
   double sum=1,temp;
   long int n=1,mu=1;
   while(n<=15){
     mu = mu*n;
     temp = 1/(float)mu;
     printf("mu%lf\n",temp);
     sum += 1/(float)mu;
     n++;
   }
   printf("计算结果为:%lf",sum);
   return 0;
}

11.从键盘上输入两个3×3的矩阵,分别求出这两个矩阵的转置结果及两个矩阵的和,并输出。要求:

(1)设计函数InputMatrix,用于实现矩阵输入;
(2)设计函数ReverseMatrix,用于实现矩阵转置;
(3)设计函数AddMatrix,用于实现两个矩阵和;
(4)设计函数OutputMatrix,用于实现矩阵输出,在屏幕上显示:
(5)设计主函数main,分别调用这些自定义函数进行测试。
#include <stdio.h>
#include <string.h>
int main(){
  int A[3][3]={1,2,3,4,5,6,7,8,9},B[3][3]={3,4,5,6,4,5,3,4,5},C[3][3];
 // void InputMatrix(int *A[3][3]);
  void ReverseMarix(int A[3][3]);
  void AddMatrix(int A[3][3],int B[3][3],int C[3][3]);
  //InputMatrix(&A);
  //InputMatrix(&B);
  int i,j;
   printf("输出的矩阵为\n");
    OutputMatix(&A);
  /**/
    AddMatrix(A,B,C);
    ReverseMarix(&A);
    printf("转置后的矩阵为\n");
    OutputMatix(&A);
}
// 两个矩阵之和
void AddMatrix(int A[3][3],int B[3][3],int C[3][3]){
    int i,j,sum,t,s;
    int a,b;
    for(i=0;i<3;i++){
        for(j=0;j<3;j++){
                // A的第i行元素 * b第j先元素的和
             sum = 0;
            for(s=0;s<3;s++){
                      // printf("%d",*A[i,s]);
                      a = A[i][s];
                        b=B[s][j];
                       printf("%d",b);
                sum+= a+b;
            }
           sum=A[i][0] * B[0][j] + A[i][1] * B[1][j] + A[i][2] * B[2][j];
           C[i][j]=sum;
        }
    }
     // printf("求和后的矩阵为\n");
        OutputMatix(C);
}
// 输出矩阵的值
void OutputMatix(int A[3][3]){
  int i,j;
  for(i=0;i<3;i++){
        for(j=0;j<3;j++){
            printf("%10d",A[i][j]);
        }
        printf("\n");
    }
}
// 矩阵转置
void ReverseMarix(int A[3][3]){ //实现矩阵的转置
    printf("进行转置方法");
     int temp[3][3]; //临时矩阵
    //将矩阵A的值,赋值给矩阵temp
    int i,j;
    for(i=0;i<3;i++){
        for(j=0;j<3;j++){
            temp[i][j] = A[i][j];
           // printf("%d",*A<i>[j]);
        }
    }
    // 矩阵转置
     for(i=0;i<3;i++){
        for(j=0;j<3;j++){
            A[j][i]=temp[i][j];
        }
    }
}
//输入矩阵
void InputMatrix(int *A[3][3]){
    int i,j;
    printf("请输入一个3x3的矩阵(同行元素空格分格):\n");
    for(i=0;i<3;i++){
       scanf("%d %d %d",&A[i][0],&A[i][1],&A[i][2]);
       printf("\n");
    }
}
知识需要管理,知识需要分享
游客


返回顶部

公众号

公众号