当前位置: 首页 > news >正文

02-C语言经典算法100例

21、题目:利用递归方法求5!。

int main()
{
	int i;
	int fact();
	for(i=0;i<=5;i++)
		printf("\40:%d!=%d\n",i,fact(i));
}
int fact(j)
int j;
{
	int sum;
	if(j==0)
		sum=1;
	else
		sum=j*fact(j-1);
	return sum;
}

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

	printf("请输入5个字符");
	char c1[5];
	scanf("%s",c1);
	int i;

	for(i=4;i>=0;i--)
	{
		printf("%c",c1[i]);
	}
	printf("\n");



-------------------------------------------------------


int main()
{
    int i=5;
    void palin(int n);
    printf("请输入5个字符\40:\40");
    palin(i);
    printf("\n");
}
void palin(n)
int n;
{
    char next;
    if(n<=1)
	{
        next=getchar();
        printf("相反顺序输出结果\40:\40");
        putchar(next);
	} 
	else 
	{
        next=getchar();
        palin(n-1);
        putchar(next);
    }
}

23、有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。

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

int main(int argc,char *argv[])
{
	printf("%d\n",age(5));
	return 0;
}

24、题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

程序分析:学会分解出每一位数,如下解释。

	long a,b,c,d,e,x;
    printf("请输入 5 位数字:");
    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("为 5 位数,逆序为: %ld %ld %ld %ld %ld\n",e,d,c,b,a);
    } 
	else if(b!=0) 
	{
		printf("为 4 位数,逆序为: %ld %ld %ld %ld\n",e,d,c,b);
    } 
	else if(c!=0) 
	{
		printf("为 3 位数,逆序为:%ld %ld %ld\n",e,d,c);
    } 
	else if(d!=0) 
	{
		printf("为 2 位数,逆序为: %ld %ld\n",e,d);
    } 
	else if(e!=0) 
	{
		printf("为 1 位数,逆序为:%ld\n",e);
    }

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

程序分析:学会分解出每一位数。

	long a,b,c,d,e,x;
    printf("请输入 5 位数字:");
    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("%ld是回文数!\n",x);
	}
	else
	{
		printf("%ld不是回文数!\n",x);
	}

26、题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。

程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。

	char first;
	char c;

	printf("pls input first char:");
	scanf("%c",&first);
	switch(first)
	{
		case 'm':
			printf("is monday!\n");
			break;
		
		case 't':
			printf("pls input next char:");
			scanf("%s",&c);
			if(c == 'h')
				printf("is thursday!\n");
			else
				printf("is  tuesday!\n");
			break;
			
		case 'w':
			printf("is wednesday!\n");
			break;
			
		case 'f':
			printf("is friday!\n");
			break;
			
		case 's':
			printf("pls input next char:");
			scanf("%s",&c);
			if(c == 'a')
				printf("is saturday!\n");
			else
				printf("is  sunday!\n");
			break;
			
		default:
			printf("error!pls input again!\n");
			break;
	}

27、题目:删除一个字符串中的指定字母,如:字符串 "aca",删除其中的 a 字母。 

char* deleteCharacters(char * str, char * charSet)
{
    int hash [256];
    if(NULL == charSet)
        return str;
    for(int i = 0; i < 256; i++)
        hash[i] = 0;//清空数组
	
    for(int i = 0; i < strlen(charSet); i++)
        hash[charSet[i]] = 1;
	
    int currentIndex = 0;
    for(int i = 0; i < strlen(str); i++)
    {
        if(!hash[str[i]])
            str[currentIndex++] = str[i];
    }
	
    str[currentIndex] = '\0';
    return str;
}
 
int main()
{
    char s[2] = "a";     // 要删除的字母
    char s2[5] = "aca";  // 目标字符串
    printf("%s\n", deleteCharacters(s2, s));
    return 0;
}

28、题目:对10个数进行排序。

程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换, 下次类推,即用第二个元素与后8个进行比较,并进行交换。

	printf("pls input ten number:");
	int num,i,a[10],j,temp;
	for(i=0;i<10;i++)
	{
		scanf("%d",&num);// 15 48 10 24 45 31 18 4 19 20
		a[i] = num;
	}
	printf("排序前:");
	for(i=0;i<10;i++)
	{
		printf("%d->",a[i]);
	}
	printf("\n");
	
	for(j=0;j<9;j++)
	{
		int min = j;
		for(i=j+1;i<10;i++)
		{
			if(a[min]>a[i])
				min = i;
		}
		if(min!=j)
        {
            temp=a[min];
            a[min]=a[j];
            a[j]=temp;
        }
	}
	printf("排序后:");
	for(i=0;i<10;i++)
	{
		printf("%d->",a[i]);
	}
	printf("\n");

29、题目:求一个3*3矩阵对角线元素之和

程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。

	int i,j,a[N][N],sum=0;
    printf("请输入矩阵(3*3):\n");
    for(i=0;i<N;i++)
        for(j=0;j<N;j++)
            scanf("%d",&a[i][j]);
    for(i=0;i<N;i++)
        sum+=a[i][i];
    printf("对角线之和为:%d\n",sum);

30、 题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。

	int a[11] = {10,20,25,35,46,55,60,75,80,85};
	int number,i,j,temp1,temp2;
	printf("pls input number:");
	scanf("%d",&number);
	if(number > a[9])
		a[10] = number;
	else
	{
		for(i=0;i<10;i++)
		{
			if(number < a[i])
			{
				temp1 = a[i];//temp1=25
				a[i] = number;	//a[2]=25
				for(j=i+1;j<11;j++)
                {
                    temp2=a[j];//temp2=35
                    a[j]=temp1;//a[3]=25
                    temp1=temp2;//temp1=35
                }
                break;
			}
				
		}
		
	}
	
	for(i=0;i<11;i++)
	{
		printf("%d-",a[i]);
	}
	printf("\n");

相关文章:

  • 〖Python 数据库开发实战 - Python与Redis交互篇③〗- 利用 redis-py 实现列表数据类型的常用指令操作
  • LwIP学习笔记1 - LwIP的设计目的、分层设计思想及模块划分概览
  • 使用 Convex 进行状态管理的指南
  • 卷积神经网络参数解读
  • IP 地址及其应用(计算机网络)
  • poi-tl(word模板渲染)
  • Java线程
  • 【Flink读写外部系统】Flink自定义kafka分区并输出
  • 【云原生】学习K8s的扩展技能(CRD)
  • Chapter05 修炼python基本功:条件语句和循环
  • 彻底掌握Makeifle(三)
  • 手机抓取蓝牙日志btsnoop的方法汇总(Android一直补充中)
  • 【Vue 开发实战】实战篇 # 30:实现一个可动态改变的页面布局
  • [单片机框架][drivers层][cw2015/ADC] fuelgauge 硬件电量计和软件电量计(一)
  • 【iVX 开发 - 入门】开发环境、应用对象树介绍(含操作演示)
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • Android组件 - 收藏集 - 掘金
  • angular2开源库收集
  • JavaScript新鲜事·第5期
  • JDK9: 集成 Jshell 和 Maven 项目.
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • python学习笔记-类对象的信息
  • Spring Boot MyBatis配置多种数据库
  • spring security oauth2 password授权模式
  • vue自定义指令实现v-tap插件
  • 检测对象或数组
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 算法-插入排序
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • #pragma once
  • #图像处理
  • (1)(1.13) SiK无线电高级配置(六)
  • (3)nginx 配置(nginx.conf)
  • (4)事件处理——(7)简单事件(Simple events)
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (十一)图像的罗伯特梯度锐化
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .net core 6 集成和使用 mongodb
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .net6 webapi log4net完整配置使用流程
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • .Net中wcf服务生成及调用
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • []使用 Tortoise SVN 创建 Externals 外部引用目录
  • [20170705]lsnrctl status LISTENER_SCAN1
  • [20181219]script使用小技巧.txt
  • [bzoj 3124][sdoi 2013 省选] 直径
  • [C#]winform部署yolov9的onnx模型
  • [C++]打开新世界的大门之C++入门
  • [Deep Learning] 神经网络基础