目录
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 个人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数),凡报到 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,成绩分数为(包含)0到100之间的一个整
代码如下:
#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;
}