- ☘前言☘
- 主要知识点
- 差分法初体验
- 课后习题
- 1837. K 进制表示下的各位数字总和
- 1399. 统计最大组的数目
- 504. 七进制数
- 写在最后
☘前言☘
今天是c语言基础打卡的第26天,今天这写题我都写过,给个题解供大家参考把。
相关链接:
【第26题】给定 l 和 r,输出所有 [l, r] 的水仙花数 | 差分法初体验
全文大约阅读时间: 20min
六作者简介:一个从工业设计改行学嵌入式的年轻人
✨联系方式:2201891280(QQ)
主要知识点 差分法初体验
利用差分法的思想,求[l,r]区间内的的结果就是求出1-n内的结果记为S
a
n
s
=
S
(
n
)
−
S
(
l
−
1
)
.
ans= S(n) - S(l - 1).
ans=S(n)−S(l−1).
#includeint 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("non"); } 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;
}
写在最后
最近忙于更新自己的一些总结文章,这个系列更新的较晚,大家如果喜欢还希望给个点赞收藏啥的 我会继续更新下去的0.0


![[解题报告]【第26题】给定 l 和 r,输出所有 [l, r] 的水仙花数 | 差分法初体验 [解题报告]【第26题】给定 l 和 r,输出所有 [l, r] 的水仙花数 | 差分法初体验](http://www.mshxw.com/aiimages/31/605325.png)
