被三整除

这个题暂时可以归为数学归纳法




方法一:

这里可以用到一个数学课学过的性质。如果a+b+c的值可以被3整除。那么abc组成的数也能够被3整除。


#include<stdio.h>
#define maxlen 1007
char road[maxlen];
int main() {
    int t, i;
    scanf("%d", &t);
    for (i = 0; i < t; ++i) {
        int len, count = 0;
        scanf("%d", &len);
        scanf("%s", road);
        char *p;
        for (p = road; p < road + len; ++p) {
            if (*p == '.') {
                p[1] = p[2] = 'X';
                count++;
            }
        }
        printf("%d\n", count);
    }
    return 0;

方法二:

写出来当插入i以后的规律:
i = 1 ----> 1
i = 2 ----> 0
i = 3 ----> 0
i = 4 ----> 1
i = 5 ----> 0
i = 6 ----> 0
i = 7 ----> 1
………………
发现在区间[1,x]之间共计有 fuck(x) = (x+2)/3 个1,剩下的都满足要求
那么在区间[l, r]上的 r-l+1个 数字中,必须抠掉 fuck(r) - fuck(l-1) 个不满足要求的数字。
直接打印出来就可以了,O(1),不需要循环遍历。


#include<stdio.h>
#define fuck(x) (((x)+2)/3)
int main(){
    int l, r;
    while(~scanf("%d%d", &l, &r))
        printf("%d\n", r-l+1-fuck(r)+fuck(l-1));
    return 0;
}

# 题目重述 编写程序找出能被3整除的数。程序从用户输入获取一个初始数值,若该数小于等于100,则检查其是否能被3整除,并输出符合条件的数。 # 给出答案(答案为带注释的代码块) ```c #include<stdio.h> int main() { // 修正:函数名应为main,语法错误 int num; scanf("%d", &num); // 修正:格式字符串错误,缺少引号,应为"%d" while(num <= 100) { // 当num小于等于100时循环 if(num % 3 == 0) { // 判断num是否能被3整除 printf("能被整除的数为:%d\n", num); // 修正:输出应包含num值 } num++; // 每次循环num加1 } return 0; } ``` # 代码解析 1. **第1行**:包含标准输入输出头文件,用于使用`scanf`和`printf`。 2. **第2行**:`intrmainn(` 应为 `int main()`,存在拼写错误。 3. **第4行**:声明整型变量`num`用于存储用户输入。 4. **第5行**:`scanf(%a("%d"` 存在语法错误,正确应为 `scanf("%d", &num);`。 5. **第6行**:`while(num<=100)` 循环条件正确,但需添加花括号 `{}` 包裹循环体。 6. **第8行**:`if(num%3==0)` 条件正确,判断能否被3整除。 7. **第9行**:`num++;` 应为 `num++;`,且应在判断后递增。 8. **第11行**:`printf("能被整除的数为:\n", num);` 错误地未输出`num`值,应改为`%d`占位符。 9. **第12行**:`return 0;` 正确结束程序。 # 知识点 - **`%` 运算符**:取模运算,判断两数相除余数是否为0,常用于整除判断。 - **`while` 循环**:当条件为真时重复执行代码块,控制流程。 - **`scanf` 与 `printf`**:标准I/O函数,用于读取输入和格式化输出,需注意格式字符串正确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值