一、数字在升序数组中出现的次数
给定一个长度为 n 的非降序数组和一个非负数整数 k ,要求统计 k 在数组中出现的次数
暴力求解:
int GetNumberOfk(int* data, int dataLen, int k)
{
int count = 0;
for (int i = 0; i < dataLen; i++)
{
if (*(data + i) == k)
count++;
if (count != 0 && *(data + i) != k)//避免多余循环
break;
}
return count;
}
二、整数转换
编写一个函数,确定需要改变几个位才能将整数A转成整数B
int converInteger(int A, int B)
{
int count = 0;
while (A != B)
{
if (A % 2 != B % 2)
count++;
A /= 2;
B /= 2;
}
return count;
}
三、图片整理
Lily上课时使用字母数字图片教小朋友们学习英语单词,每次都需要把这些图片按照大小(ASCII码值从小到大)排列收好。请大家给Lily帮忙,通过代码解决。Lily使用的图片使用字符"A"到"Z"、"a"到"z"、"0"到"9"表示。
输入描述:
一行,一个字符串,字符串中的每个字符表示一张Lily使用的图片。
输出描述:
Lily的所有图片按照从小到大的顺序输出
这里简单使用下qsort排序即可A出来
#include<stdio.h>
#include<string.h>
int cmp_char(const void* e1,const void *e2)
{
return *(char*)e1-*(char*)e2;
}
int main()
{
char ch[1002]={0};
scanf("%s",ch);
int sz=strlen(ch);
qsort(ch,sz,1,cmp_char);
printf("%s",ch);
return 0;
}
四、字符个数统计
编写一个函数,计算字符串中含有的不同字符的个数。字符在 ASCII 码范围内( 0~127 ,包括 0 和 127 ),换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次
例如,对于字符串 abaca 而言,有 a、b、c 三种不同的字符,因此输出 3 。
输入描述:
输入一行没有空格的字符串。
输出描述:
输出 输入字符串 中范围在(0~127,包括0和127)字符的种数。
int main()
{
char arr[501] = { 0 };
int count[128] = { 0 };//把字符串对应的Ascll码作为下标
int sum = 0;//计算不同字符个数
scanf("%s", arr);
for (int i = 0; i < strlen(arr); i++)
{
count[arr[i]]++;
}
//只要count[i]不等于0,sum++
for (int i = 0; i < 128; i++)
{
if (count[i])
sum++;
}
printf("%d", sum);
return 0;
}
五、箭形图案
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的箭形图案。
输入描述:
本题多组输入,每行一个整数(2~20)。
输出描述:
针对每行输入,输出用“*”组成的箭形。
#include<stdio.h>
int main()
{
int n = 0;
while (scanf("%d", &n) != EOF)
{
int i = 0;
int j = 0;
int k = 0;
for (i = 0; i < n + 1; i++)
{
for (j = 0; j < n - i; j++)
{
printf(" ");
}
for (k = 0; k <= i; k++)
{
printf("*");
}
printf("\n");
}
for (i = 0; i < n; i++)
{
for (j = 0; j <= i; j++)
{
printf(" ");
}
for (k = 0; k < n - i; k++)
{
printf("*");
}
printf("\n");
}
}
return 0;
}