牛客网刷题——第三天
一、数字在升序数组中出现的次数
给定一个长度为 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(" "); } for (i = 0; i < n; i++) { for (j = 0; j <= i; j++) { printf(" "); } for (k = 0; k < n - i; k++) { printf("*"); } printf(" "); } } return 0; }