C语言经典算法 21-30

21 一个有序的数组插入一个数

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

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

代码如下:

#include<stdio.h>
int main(void)
{
    int a[11]={22,34,57,76,88,90,91,99,100,123};
	int i;
	int j=0;
	int temp=0;
	printf("请输入你要插入的数据:");
	scanf("%d",&temp);
	if(temp<a[9])
	{
		for(i=0;i<11;i++)
		{
			if(temp<a[i])//找到要插入的位置
			{
				for(j=10;j>i;j--)
				{
					a[j]=a[j-1];
				}
				a[i]=temp;
				break;
			}
		}
	}
	else//插入的数最大,直接在后面插入
	{
		a[10]=temp;
	}
	for(i=0;i<11;i++)
	{
		printf("%d ",a[i]);
	}
	printf("\n");
    return 0;
}

22 将一个数组逆序输出

题目:将一个数组逆序输出。 

程序分析:用第一个与最后一个交换。 
当然你也可以直接倒着输出,不过这样对于这道题没有啥意义。

代码如下:

#include<stdio.h>
int main(void)
{
	int a[5]={1,2,3,4,5};
	int i;
	int N=5;
	int temp=0;
	for(i=0;i<N/2;i++)
	{
		temp=a[i];
		a[i]=a[N-1-i];
		a[N-1-i]=temp;
	}
	for(i=0;i<5;i++)
	{
		printf("%d ",a[i]);
	}
	return 0;
}

23 报号 求最后是谁

题目:有 n 个人围成一圈,顺序排号。从第一个人开始报数(从 13 报数),凡报到 3 的人退出 圈子,
问最后留下的是原来第几号的那位。 

程序分析: 想法很简单,就是 变量 sum 从 1开始到 3 ,如果是3 的倍数,a[i] 就是变为零 ,
也就是退出的意思,i 一直都是从1到 最后一个数增加的,也就是形成了一个圈了的!

代码如下:

#include<stdio.h>
#include<string.h>
int main()
{
	int n;
	int i;
	while(scanf("%d",&n)==1)//输入总共的人数
	{
		int a[200];
		for(i=1;i<=n;i++)
			a[i]=i;
		int su=n,sum=1;
		while(1)
		{
			for(i=1;i<=su;i++)
			{
				if(a[i]==0)//代表这个人已经出去了
					continue;
				if(sum%3==0)//代表要出去的人
				{
					a[i]=0;
					n--;//总人数减1
					sum=0;
				}
				sum++;
			}
			if(n==1)//只有一个人的时候,跳出循环
				break;
		}
		for(i=1;i<=su;i++)
		{
			if(a[i]!=0)
				printf("%d\n",i);
		}
		
	}   	
	return 0;	
}

24 写一个统计字符串长度的函数

题目:写一个函数,求一个字符串的长度,在 main 函数中输入字符串,并输出其长度

代码如下:

#include<stdio.h>
int  length(char a[]);
int main(void)
{
	char a[200];
	int n=0;
	scanf("%s",a);
	n=length(a);
	printf("%d\n",n);
	return 0;
}
int  length(char a[])
{
	int i=0;
	while(a[i]!='\0')
	{
		i++;
	}
	return i;
}

25 八进制转换为十进制

题目:八进制转换为十进制 

代码如下:

#include<stdio.h>
void main() 
{
	char*p,s[6];
	int n;
	p=s; 
	gets(p);
	n=0;
	while(*(p)!='\0')
	{
		n=n*8+*p-'0'; 
		p++;
	} 
	printf("%d",n);
} 

26 判断一个素数能被几个 9 整除

判断一个素数能被几个 9 整除 

代码如下:

#include<stdio.h>
void main()
{
	long int m9=9,sum=9;
	int zi,n1=1,c9=1;
	scanf("%d",&zi);//输入的素数
	while(n1!=0)
	{
		if(!(sum%zi))//判断可不可以整除
			n1=0;
		else 
		{
			m9=m9*10;
			sum=sum+m9;
			c9++; 
		}
	} 
	printf("%ld,canbe divided by %d\"9\"",sum,c9);
	printf("\n");
}

27 输入一组数据,查询某个数据出现的次数(哈希存储)

读入N名学生的成绩,将获得某一给定分数的学生人数输出。

输入描述:
测试输入包含若干测试用例,每个测试用例的格式为


第1行:N
第2行:N名学生的成绩,相邻两数字用一个空格间隔。
第3行:给定分数

当读到N=0时输入结束。其中N不超过1000,成绩分数为(包含)0100之间的一个整

代码如下:

#include<stdio.h>
#include<algorithm>
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        int Hash[101]={0};//利用哈希存储每个分数出现的次数
        for(int i=0;i<n;i++)
        {
            int x;
            scanf("%d",&x);//定义的X相当于输入的每个分数,然后利用哈希进行统计
            Hash[x]++;
        }
        int x;
        scanf("%d",&x);//输入你需要查询的分数统计相应的人数 利用哈希返回
        printf("%d\n",Hash[x]);
    }
    return 0;

}

28 计算字符串中子串出现的次数

计算字符串中子串出现的次数 

代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    int i,j,k,TLen,PLen,count=0;
    char T[50],P[10];
    printf("请输入两个字符串,以回车隔开,母串在前,子串在后:\n");
    gets(T);
    gets(P);
    TLen=strlen(T);
    PLen=strlen(P);
    for(i=0;i<=TLen-PLen;i++)
    {
        for(j=0,k=i;j<PLen&&P[j]==T[k];j++,k++)
            ;
        if(j==PLen)count++;
    }
    printf("%d\n",count);
    system("pause");
    return 0;
}

29 简单的用户登陆系统

用户名:李华
密码:123456
#include<stdio.h>
#include<conio.h>
#include<string.h>
int main(void)
{
	char name[20];
    char password[20];
	char a;
	int i=0;
	printf("请输入你的姓名:");
	scanf("%s",name);
	printf("请输入密码:");
	while( (password[i]=getch()) != 13 )//getch()返回值是一个键值,回车的键值是13
	{
		i++;
		printf("*");//隐藏我们的密码
	}
	password[i]='\0';//把最后的回车变成结束符
	printf("\n");
	if(( strcmp(name,"李华")==0 ) && ( strcmp(password,"123456")==0 ))
	{
		printf("登陆成功\n");
	}
	else
	{
		printf("登陆失败\n");
	}
}

30 进度条加载小程序

进度条加载小程序

代码如下:

#include<stdio.h>
#include<windows.h>
int main(void)
{
	int i=0;
	int j=0;
	for(i=1;i<=20;i++)
	{
		for(j=1;j<=i;j++)
		{
			printf("--");
		}
		printf(">%d%%",i*5);
		Sleep(360);
		if(i<20)
		system("cls");
	}
	printf("\n加载完成\n");
	return 0;
}

C语言经典算法 1-10 点击跳转

C语言经典算法 11-20 点击跳转

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值