全文目录
☘前言☘
🎁主要知识点
差分法初体验
📓课后习题
1837. K 进制表示下的各位数字总和
1399. 统计最大组的数目
504. 七进制数
📑写在最后
☘前言☘
今天是c语言基础打卡的第26天,今天这写题我都写过,给个题解供大家参考把。
相关链接:
【第26题】给定 l 和 r,输出所有 [l, r] 的水仙花数 | 差分法初体验
全文大约阅读时间: 20min
🧑🏻作者简介:一个从工业设计改行学嵌入式的年轻人
✨联系方式:2201891280(QQ)
🎁主要知识点
差分法初体验
利用差分法的思想,求[l,r]区间内的的结果就是求出1-n内的结果记为S
ans=S(n)−S(l−1).
#include <stdio.h> int n, m; int all[1000]; int val[1000]; int main() { all[99] = 0; for (int i = 100; i <= 999; ++i) { int v0 = i / 100; // 提取百位 int v1 = i / 10 % 10; // 提取十位 int v2 = i % 10; // 提取个位 val[i] = (i == v0*v0*v0 + v1*v1*v1 + v2*v2*v2) ? 1 : 0; all[i] = all[i - 1] + val[i]; //打表???? } while (scanf("%d %d", &n, &m) != EOF && n) { int v = all[m] - all[n - 1]; //查表 if (!v) { printf("no\n"); } else { int hasoutput = 0; for (int i = n; i <= m; ++i) { if (val[i]) { if (hasoutput) { // (7) printf(" "); } printf("%d", i); hasoutput = 1; } } puts(""); } } return 0; }
📓课后习题
1837. K 进制表示下的各位数字总和
1837. K 进制表示下的各位数字总和
给你一个整数 n(10 进制)和一个基数 k ,请你将 n 从 10 进制表示转换为 k 进制表示,计算并返回转换后各位数字的 总和 。
转换后,各位数字应当视作是 10 进制数字,且它们的总和也应当按 10 进制表示返回。
解题思路
根据要求求解就好了。
int sumBase(int n, int k){ int ans = 0; while(n){ ans += n % k;//除留余数法 n /= k; } return ans; }
1399. 统计最大组的数目
1399. 统计最大组的数目
给你一个整数 n 。请你先求出从 1 到 n 的每个整数 10 进制表示下的数位和(每一位上的数字相加),然后把数位和相等的数字放到同一个组中。
请你统计每个组中的数字数目,并返回数字数目并列最多的组有多少个。
解题思路
因为最多10^4,所以最大也就4*9 = 36.利用hash表计数输出就好了。
int countLargestGroup(int n){ int f[37] = {0},max=0; for(int i = 1;i <= n; i++){ int count = 0,temp = i; while(temp){ //算各个位数字和 count += temp%10; temp /= 10; } f[count]++; //hash计数 if(f[count] > max) max = f[count]; } int ans = 0; for(int i = 0;i < 37;i++){ if(f[i] == max) ans++; } return ans; }
504. 七进制数
504. 七进制数
给定一个整数 num,将其转化为 7 进制,并以字符串形式输出。
解题思路
按照要求输出就好了。注意0的特殊性和负数的处理方式
char * convertToBase7(int num){ char *s = malloc(sizeof(char) * 15); int stack[15]; int count = 0,countnum = 0; if(num == 0) s[count++] = '0';//0的特殊处理 if(num < 0){//负数处理 s[count++] = '-'; num = -num; } while(num){ stack[countnum++] = num % 7; num /= 7; } int i = countnum; while(i--){ s[count++] = stack[--countnum] + '0'; } s[count] = 0; return s; }