C语言经典算法题_c 语言算法题-程序员宅基地

技术标签: C/C++  算法  C语言  后端开发  

1. 有1、2、3、4个数字,能组成多少个互不相同且无重复的三位数?分别是多少?

#include <stdio.h>
int main(){
  int i,j,k;
  printf("\n");
  for(i=1;i<5;i++){
    for(j=1;j<5;j++){
      for(k=1;k<5;k++){
        if(i!=j&&j!=k&&i!=k){
          printf("%d,%d,%d",i,j,k);
          printf("\n");
        }
      }
    }
  };
  return 0;
}

2. 一个整数,它加上100后是一个完全平方数,加上168又是一个完全平方数,请问该数是多少?

#include "math.h"
#include "stdio.h"

int main(){
  long int i,a,b,x,y;
  for(i=1;i<100000;i++){
    a = i+100;
    b = i+168;
    // 注意转换类型,否则报错
    x = sqrt((float)a);
    y = sqrt((float)b);
    if(x*x ==a && y*y==b){
      printf("\n%ld\n",i);
    }
  };
  return 0;
}

3. 企业发放的奖金根据利润提成。利润低于或等于10万元时按10%提成;利润在10万到20万之间的部分按7.5%提成;利润在20万到40万之间的部分按5%提成;利润在40万到60万之间的部分按3%提成;利润在60万到100万之间的部分按1.5%提成;高于100万的部分按1%提成。从键盘输入当月利润,求应发放奖金总数?

#include "stdio.h"

int main(){
  int bonus;
  int bonus1 = 100000*0.1;
  int bonus2 = bonus1 + (200000-100000)*0.075;
  int bonus4 = bonus2 + (400000-200000)*0.05;
  int bonus6 = bonus4 + (600000-400000)*0.03;
  int bonus10 = bonus6 +(1000000-600000)*0.015;

  long int i;
  scanf("%ld",&i);
  if(i<=100000){
    bonus = i*0.1;
  }else if(i<=200000){
    bonus = bonus1+(i-100000)*0.075;
  }else if(i<=400000){
    bonus = bonus2+(i-200000)*0.05;
  }else if(i<=600000){
    bonus = bonus4+(i-400000)*0.03;
  }else if(i<=1000000){
    bonus = bonus6+(i-600000)*0.015;
  }else{
    bonus = bonus10+(i-1000000)*0.01;
  };
  printf("bonus=%d",bonus);

  return 0;
}

4. 输入某年某月某日,判断这一天是这一年的第几天?

#include "stdio.h"

int main(){
  int year ,month,day,sum;
  printf("\n 请输入年月日 \n");
  scanf("%d,%d,%d",&year,&month,&day);
  switch(month){
    case 1:sum=0;break;
    case 2:sum=31;break;
    case 3:sum=31+28;break;
    case 4:sum=31+28+31;break;
    case 5:sum=31+28+31+30;break;
    case 6:sum=31+28+31+30+31;break;
    case 7:sum=31+28+31+30+31+30;break;
    case 8:sum=31+28+31+30+31+30+31;break;
    case 9:sum=31+28+31+30+31+30+31+31;break;
    case 10:sum=31+28+31+30+31+30+31+31+30;break;
    case 11:sum=31+28+31+30+31+30+31+31+30+31;break;
    case 12:sum=31+28+31+30+31+30+31+31+30+31+30;break;
    default:printf("input error");break;
  };
  sum = sum+day;
  if(year%400==0 || (year%4==0&&year%100!=0)){
    if(month>2){
      sum++;
    };
  };
  printf("当前是第%d天",sum);
  return 0;
}

5. 输入三个整数,把这三个数由小到大输出。

#include "stdio.h"
int main() {
  int x,y,z,t;
  scanf("%d%d%d",&x,&y,&z);
  if(x>y){
    t=x;x=y;y=t;
  };
  if(x>z){
    t=x;x=z;z=t;
  };
  if(y>z){
    t=y;y=z;z=t;
  };
  printf("small to big:%d,%d,%d",x,y,z);
  return 0;
}

6. 输出九九乘法口决表。

#include "stdio.h"
int main() {
  int i,j,result;
  for(i=1;i<10;i++){
    for(j=1;j<=i;j++){
      result = i*j;
      printf("%d*%d=%-3d",i,j,result);
    };
    printf("\n");
  }
  return 0;
}

7. 输出国际象棋棋盘。

#include "stdio.h"
int main() {
  int i,j;
  for(i=0;i<8;i++){
    for(j=0;j<8;j++){
      if((i+j)%2==0){
        printf("️");
      }else{
        printf(" ");
      };
    };
    printf("\n");
  }
  return 0;
}

8. 古典问题:有一对兔子,从出生第三个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数是多少?

分析:前两个数之和为第三个数的值,即有名的斐波那契数列。

#include "stdio.h"
int main(){
  int i;
  long f1, f2;
  f1 = f2 = 1;
  for (i = 1; i < 20; i++){
    printf("%12ld%12ld", f1, f2);
    // 每行4个,然后换行
    if(i%2==0){
      printf("\n");
    };
    f1=f1+f2;
    f2=f1+f2;
  }
  return 0;
}

9. 判断2到200之间有多少个素数,并输出所有素数。

分析:判断素数的方法,用一个数分别去除2到这个数的开平方,如果能被整除,则表明此数不是素数,反之是素数。

#include "math.h"
#include "stdio.h"

int main(){
  int h=0,leap=1;
  for(int m=2;m<200;m++){
    int k=sqrt(m);
    for(int i=2;i<=k;i++){
      if(m%i==0){
        leap=0;
        break;
      }
    };
    if(leap){
      printf("%d\n",m);
      h++;
    };
    leap=1;
  };
  printf("素数一共有%d个\n",h);
  return 0;
}

10. 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153等于1的三次方加上5的三次方加上3的三次方。

#include "stdio.h"
int main(){
  int i,j,k,n;
  for(n=100;n<1000;n++){
    // 分解出百位数
    i = n/100;
    // 分解出十位数
    j = n/10%10;
    // 分解出个位数
    k = n%10;
    if((i*100+j*10+k)==(i*i*i+j*j*j+k*k*k)){
      printf("%-5d",n);
    }
  }
  return 0;
}

11. 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5

分析:对n进行分解质因数,应先找到最小的质数i,然后按下步骤执行:

(1). 如果这个质数等于n,则说明分解质数的过程已经结束,打印出即可;

(2). 如果n不等于i,但n能被i整除,则应打印出i的值,并用n除以i的商,作为新的正整数n,重复执行;

(3). 如果n不能被i整除,将i+1作为新的i值与n进行相除计算;

#include "stdio.h"
int main(){
  int n,i;
  scanf("%d",&n);
  printf("%d=",n);
  for(i=2;i<n;i++){
    while (n!=i){
      if(n%i==0){
        printf("%d*",i);
        n=n/i;
      }else{
        break;
      }
    }
  }
  printf("%d\n",n);
  return 0;
}

12. 输入两个正整数m和n,求其最大公约数和最小公倍数。

#include "stdio.h"
int main(){
  int n,m,temp;
  int p,r;

  printf("please input tow number\n");
  scanf("%d,%d", &n,&m);

  // 把大数放在n中,把小数放在m中.
  if(n<m){
    temp = n;
    n = m;
    m = temp;
  };

  p=n*m;

  // 欧几里德算法
  // 100 模 60 余 40
  // 60 模 40 余 20
  // 40 模 20 余0
  // 20 即为最大公约数
  while (m!=0){
    r = n%m;
    n = m;     
    m = r; 
  };

  printf("最大公约数是%d\n",n);
  // 两数乘积除以最大公约数即为最小公倍数
  printf("最小公倍数是%d\n",p/n);

  return 0;
}

13. 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

分析:利用while语句,条件为输入的字符不为'\n'。

#include "stdio.h"
int main(){
  char c;
  int letters=0,space=0,digit=0,others=0;
  printf("please input some words:\n");
  while ((c=getchar())!='\n'){
    // 字符
    if(c>='a'&&c<='z'|| c>='A'&& c<='Z'){
      letters++;
    // 空格
    }else if(c==32){
      space++;
    // 数字
    }else if(c>='0' && c<='9'){
      digit++;
    // 其它
    }else{
      others++;
    }
  };
  printf("char=%d space=%d,digit=%d,others=%d",letters,space,digit,others);
  return 0;
}

14. a+aa+aaa+aaaa+a...a的值,其中a是一个数字,几个数相加由键盘来控制。

#include "stdio.h"
int main(){
  int a,n,count=1;
  long int sn=0,tn=0;
  printf("please input a and n\n");
  scanf("%d,%d",&a,&n);
  printf("a=%d,n=%d",a,n);

  // n 为位数
  while (count<=n){
    tn = tn+a;   // 0+2,2+20,22+200
    a = a*10;    // 2*10,20*10,200*10
    sn = sn+tn;  // 0+2,2+22,2+22+222
    ++count;
  };
  printf("result is %ld\n",sn);
  return 0;
}

15. 一个数恰好等于它的因子之和,这个数就是一个“完数”。例如6=1+2+3,编程求出1000以内的所有完数。

#include "stdio.h"
int main(){
  int m,i,s;
  for(m=1;m<=10000;m++){
    s=0;
    // 求出该数的因子之和
    for(i=1;i<m;i++){
      if(m%i==0){
        s=s+i;
      }
    };
    // 因子数等于当前数
    if(s==m){
      printf("%d\n",m);
    }
  }
  return 0;
}

16. 一球从100米高度自由落下,每次落地反跳回原高度的一半,再落下,求它在第10次落地时,共经过多少米?第10次反弹多高。

#include "stdio.h"

int main(){
  float total = 100.0, harf = total / 2;
  for (int n = 2; n <= 10; n++){
    total = total + 2 * harf;
    harf = harf / 2;
  };
  printf("第10次落地时共经过米数为%f\n",total);
  printf("第10次反弹高度为%f\n",harf);
  return 0;
}

17. 猴子吃桃问题:猴子第一天吃下若干个桃子,当即吃下一半,还不过瘾,又多吃了一个,第二天又将剩下的桃子吃了一半,又多吃了一个,以后每天都吃前一天剩下的一半零一个,到第10天想早上再吃时,只剩下一个桃子了。求第一天一共摘了多少个桃子?

#include "stdio.h"

int main(){
  int day,x1,x2;
  // 第9天吃完只剩一个桃了
  day=9;x2=1;
  while (day>0){
    // 第一天的桃子数是第二天的桃子数加1的2倍
    x1=(x2+1)*2;
    x2=x1;
    day--;
  };
  printf("第10天一共摘了%d",x2);
  return 0;
}

18. 两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,已队为x,y,z三人,由抽签决定比赛。有人向队员打听比赛的的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。


#include "stdio.h"
int main(){
  // 假设i是a的对手,j是b的对手,k是c的对手
  char i,j,k;
  for(i='x';i<='z';i++){
    for(j='x';j<='z';j++){
      for(k='x';k<='z';k++){
        // 自己的队友不会比
        if(i!=j && i!=k && j!=k){
          // a不和x比,c不和x,z比
          if(i!='x' && k!='x' && k!='z'){
            printf("a--%c\tb--%c\tc--%c\n",i,j,k);
            // a--z b--x c--y
          }
        }
      }
      
    }
  }
  return 0;
}

19. 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之知。

#include "stdio.h"
int main(){
  int n,t,number = 20;
  float a =2,b=1,s=0;
  for(n=1;n<=number;n++){
    s=s+a/b;
    t=a;a=a+b;b=t;
  };
  printf("这些序列数之和为%9.6f\n",s);
  return 0;
}

20. 求1+2!+3!+4!+...+20!的和。

#include "stdio.h"
int main(){
  float n,s=0,t=1;
  for(n=1;n<20;n++){
    t*=n;
    s+=t;
    printf("%f\n",t);
  }
  printf("%f\n",s);
  return 0;
}

21. 利用递归法求5!。

#include "stdio.h"
int fact(int n){
  if(n==0){
    return 1;
  };
  return n*fact(n-1);
}
int main(){
  int result = fact(5);
  printf("%d\n",result);
  return 0;
}

22. 利用递归函数的调用方式,将所输入的5个字符,以相反的顺序打印出来。

#include "stdio.h"
void reversal(int n){
  char next= getchar();
  if(n<=1){
    printf("输入完毕\n");
  }else{
    reversal(n-1);
  };
  putchar(next);

}
int main(){
  // 递归调用,由内向外释放
  reversal(5);
  printf("\n逆置完毕\n");
  return 0;
}

23. 有5个人坐在一起,第5个人比第4个人大2岁,第4个人比第3个人大2岁,第3个人比第2个人大2岁,第2个人又比第1个人大2岁,第1个人为10岁,请问第5个人多少岁?

分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第5个人岁数,需要知道第4个人的岁数,依次类推,推到第一个人,再回推。

#include "stdio.h"

int getAge(int n){
  int c;
  if(n==1){
    c=10;
  }else{
    c=getAge(n-1)+2;
  };
  return c;
}

int main(){
  int age = getAge(5);
  printf("%d\n",age);
  return 0;
}

 24. 输入一个不多于5位数的正整数,求出它是几位数并逆序打印出各位数字。

#include "stdio.h"

int main(){
  long a,b,c,d,e,x;
  scanf("%ld",&x);
  a = x/10000;      // 分解出万位
  b = x%10000/1000; // 分解出千位
  c = x%1000/100;   // 分解出百位
  d = x%100/10;     // 分解出十位
  e = x%10;         // 分解出个位
 
  if(a!=0){
    printf("there are 5 number:%ld,%ld,%ld,%ld,%ld\n",e,d,c,b,a);
  }else if(b!=0){
    printf("there are 4 number:%ld,%ld,%ld,%ld\n",e,d,c,b);
  }else if(c!=0){
    printf("there are 3 number:%ld,%ld,%ld\n",e,d,c);
  }else if(d!=0){
    printf("there are 2 number:%ld,%ld\n",e,d);
  }else if(e!=0){
    printf("there are 1 number:%ld\n",e);
  };
  return 0;
}

25. 一个5位数,判断它是不是回文数。即12321是一个回文数,个位与万位相同,十位与千位相同。

#include "stdio.h"
int main(){
  long a,b,c,d,e,x;
  scanf("%ld",&x);

  a = x/10000;      // 分解出万位
  b = x%10000/1000; // 分解出千位
  c = x%1000/100;   // 分解出百位
  d = x%100/10;     // 分解出十位
  e = x%10;         // 分解出个位

  if(a==e && b==d){
    printf("这是一个回文数\n");
  }else{
    printf("这不是一个回文数\n");
  };
  return 0;
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_40629244/article/details/120847834

智能推荐

FX3/CX3 JLINK 调试_ezusbsuite_qsg.pdf-程序员宅基地

文章浏览阅读2.1k次。FX3 JLINK调试是一个有些麻烦的事情,经常有些莫名其妙的问题。 设置参见 c:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\doc\firmware 下的 EzUsbSuite_UG.pdf 文档。 常见问题: 1.装了多个版本的jlink,使用了未注册或不适当的版本 选择一个正确的版本。JLinkARM_V408l,JLinkA_ezusbsuite_qsg.pdf

用openGL+QT简单实现二进制stl文件读取显示并通过鼠标旋转缩放_qopengl如何鼠标控制旋转-程序员宅基地

文章浏览阅读2.6k次。** 本文仅通过用openGL+QT简单实现二进制stl文件读取显示并通过鼠标旋转缩放, 是比较入门的级别,由于个人能力有限,新手级别,所以未能施加光影灯光等操作, 未能让显示的stl文件更加真实。****效果图:**1. main.cpp```cpp#include "widget.h"#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); _qopengl如何鼠标控制旋转

刘焕勇&王昊奋|ChatGPT对知识图谱的影响讨论实录-程序员宅基地

文章浏览阅读943次,点赞22次,收藏19次。以大规模预训练语言模型为基础的chatgpt成功出圈,在近几日已经给人工智能板块带来了多次涨停,这足够说明这一风口的到来。而作为曾经的风口“知识图谱”而言,如何找到其与chatgpt之间的区别,找好自身的定位显得尤为重要。形式化知识和参数化知识在表现形式上一直都是大家考虑的问题,两种技术都应该有自己的定位与价值所在。知识图谱构建往往是抽取式的,而且往往包含一系列知识冲突检测、消解过程,整个过程都能溯源。以这样的知识作为输入,能在相当程度上解决当前ChatGPT的事实谬误问题,并具有可解释性。

如何实现tomcat的热部署_tomcat热部署-程序员宅基地

文章浏览阅读1.3k次。最重要的一点,一定是degbug的方式启动,不然热部署不会生效,注意,注意!_tomcat热部署

用HTML5做一个个人网站,此文仅展示个人主页界面。内附源代码下载地址_个人主页源码-程序员宅基地

文章浏览阅读10w+次,点赞56次,收藏482次。html5 ,用css去修饰自己的个人主页代码如下:&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;&lt;html xmlns="http://www.w3.org/1999/xh..._个人主页源码

程序员公开上班摸鱼神器!有了它,老板都不好意思打扰你!-程序员宅基地

文章浏览阅读201次。开发者(KaiFaX)面向全栈工程师的开发者专注于前端、Java/Python/Go/PHP的技术社区来源:开源最前线链接:https://github.com/svenstaro/gen..._程序员怎么上班摸鱼

随便推点

UG\NX二次开发 改变Block UI界面的尺寸_ug二次开发 调整 对话框大小-程序员宅基地

文章浏览阅读1.3k次。改变Block UI界面的尺寸_ug二次开发 调整 对话框大小

基于深度学习的股票预测(完整版,有代码)_基于深度学习的股票操纵识别研究python代码-程序员宅基地

文章浏览阅读1.3w次,点赞18次,收藏291次。基于深度学习的股票预测数据获取数据转换LSTM模型搭建训练模型预测结果数据获取采用tushare的数据接口(不知道tushare的筒子们自行百度一下,简而言之其免费提供各类金融数据 , 助力智能投资与创新型投资。)python可以直接使用pip安装tushare!pip install tushareCollecting tushare Downloading https://files.pythonhosted.org/packages/17/76/dc6784a1c07ec040e74_基于深度学习的股票操纵识别研究python代码

中科网威工业级防火墙通过电力行业测评_电力行业防火墙有哪些-程序员宅基地

文章浏览阅读2k次。【IT168 厂商动态】 近日,北京中科网威(NETPOWER)工业级防火墙通过了中国电力工业电力设备及仪表质量检验测试中心(厂站自动化及远动)测试,并成为中国首家通过电力协议访问控制专业测评的工业级防火墙生产厂商。   北京中科网威(NETPOWER)工业级防火墙专为工业及恶劣环境下的网络安全需求而设计,它采用了非X86的高可靠嵌入式处理器并采用无风扇设计,整机功耗不到22W,具备极_电力行业防火墙有哪些

第十三周 ——项目二 “二叉树排序树中查找的路径”-程序员宅基地

文章浏览阅读206次。/*烟台大学计算机学院 作者:董玉祥 完成日期: 2017 12 3 问题描述:二叉树排序树中查找的路径 */#include #include #define MaxSize 100typedef int KeyType; //定义关键字类型typedef char InfoType;typedef struct node

C语言基础 -- scanf函数的返回值及其应用_c语言ignoring return value-程序员宅基地

文章浏览阅读775次。当时老师一定会告诉你,这个一个"warning"的报警,可以不用管它,也确实如此。不过,这条报警信息我们至少可以知道一点,就是scanf函数调用完之后是有一个返回值的,下面我们就要对scanf返回值进行详细的讨论。并给出在编程时利用scanf的返回值可以实现的一些功能。_c语言ignoring return value

数字医疗时代的数据安全如何保障?_数字医疗服务保障方案-程序员宅基地

文章浏览阅读9.6k次。十四五规划下,数据安全成为国家、社会发展面临的重要议题,《数据安全法》《个人信息保护法》《关键信息基础设施安全保护条例》已陆续施行。如何做好“数据安全建设”是数字时代的必答题。_数字医疗服务保障方案

推荐文章

热门文章

相关标签