牛客网刷题 | BC61 牛牛的二三七整除

描述

牛牛从键盘输入一个整数,请你判断这个整数能被 2 3 7 中哪几个数整除,并按升序输出。如果不能被 2 3 7 任意一个数整除则输出 n。

输入描述:

输入一个整数

输出描述:

输出能被 2 3 7 哪几个数整除,并按升序输出。


题解 :

!!!!!!!!!!!!

一定要看清题目说的是什么 

我把题目看成 输出多个数字 分别求出被谁能整除

捣鼓了半天也没头绪......

重读了一遍题目 才发现 我理解错了......

!!!!!!!!!!!!!!

最好拿个笔和纸画个解题思路 会好很多.......

-------------------------------------------

一开始我想到的就是使用Switch 语句进行分别判断

然后我就写了如下代码 

当然 里面也有拿来主义的成分

不过我都理解和吸收了

将对方的代码进行了一些自己的想法上的改变

还是考了循环的使用

理解之后题目并不是很难

非常的简单

如果被一个数整除 就输出xxx

没有的话就输出 n


代码 1 如下: 

# include <stdio.h>
int main()
{
    int n;
    //int i = 0;//这里定义的i 起到一个过渡的作用 防止n 误操作
        //测试了一下 可以删 替换为        
    //else if (n % 2 != 0 || n % 3 != 0 || n % 7 != 0)
            

    scanf_s("%d", &n);
    {
        switch (1)
        {
        case 1:

            if (n % 2 == 0)

            {
                printf("2 ");
                //i++;
               
            }

        case 2:
            if (n % 3 == 0)
            {
                printf("3 ");
               // i++;
               
            }
        case 3:
            if (n % 7 == 0)
            {
                printf("7 ");
                // i++;
            }
            else if (n % 2 != 0 || n % 3 != 0 || n % 7 != 0)
            {
                printf("n");
            }
                
        }

    }

    return 0;
}

代码 2 如下:

int main()
{
    int ch;
    scanf("%d",&ch);
    if(ch%2==0)
        printf("2 ");
    if(ch%3==0)
        printf("3 ");
    if(ch%7==0)
        printf("7 ");
    if(ch%7!=0&&ch%3!=0&&ch%2!=0)
        printf("n");
    return 0;
}

这种就比较暴力了


代码 3 如下:


int main()
{
	int a;
	//这个是输入的变量
	int c = 0;
	//这个是循环控制变量
	int d = 0;
	//这个是输出计数器
	int arr[3] = { 2,3,7 };
	//把被除数存到数组里去
	scanf("%d", &a);

	for (; c < 3; c++)
	{
		if (a % arr[c] == 0)
		{
			printf("%d ", arr[c]);
			d++;
		}
	}
	//循环整除三次,如果有任何一次命中了判断,那么d+1之后就不会命中下面的判断了
	//写完感觉自己还是有点小聪明的,偷笑hhh
	if (d == 0)
	{
		printf("n ");
	}
	
	return 0;
}

这种更深一级。


扩展:Switch 语句

以下内容来自:C switch 语句 | 菜鸟教程 (runoob.com)

switch 语句是一种有限制的控制流语句,它用于根据表达式的值执行不同的代码块。

一个 switch 语句允许测试一个变量等于多个值时的情况,每个值称为一个 case,且被测试的变量会对每个 switch case 进行检查。

语法

C 语言中 switch 语句的语法:

switch(expression){
    case constant-expression  :
       statement(s);
       break; /* 可选的 */
    case constant-expression  :
       statement(s);
       break; /* 可选的 */
  
    /* 您可以有任意数量的 case 语句 */
    default : /* 可选的 */
       statement(s);
}

switch 语句说明:

  • switch 后面的表达式的值将会与每个 case 后面的常量值进行比较,直到找到匹配的值或者执行到 default(如果存在)。
  • 如果找到匹配的值,将执行相应 case 后面的代码块,然后跳出 switch 语句。
  • 如果没有匹配的值,并且有 default,则执行 default 后面的代码块。
  • 如果没有匹配的值,并且没有 default,则跳过整个 switch 语句直到结束。

switch 语句必须遵循下面的规则:

  • switch 表达式的类型: switch 语句中的表达式必须是整数类型(char、short、int或枚举),或者是能够隐式转换为整数类型的表达式。

  • case 标签的唯一性: 在 switch 语句中,每个 case 标签必须是唯一的,不能有重复的值。

  • 默认情况的可选性: switch 语句中的 default 标签是可选的。如果没有匹配的 case 标签,则会执行 default 标签下的代码块(如果存在)。

  • case 标签中的常量值: case 标签中只能是常量值,不能是变量或表达式。

  • case 标签的顺序: switch 语句中的 case 标签的顺序并不重要,它们可以按照任意顺序编写。程序会按照 case 标签出现的顺序依次匹配。

  • break 语句的使用: 在每个 case 标签的代码块结束处通常需要使用 break 语句来终止 switch 语句的执行。如果没有 break 语句,程序将会继续执行下一个 case 标签中的代码,直到遇到 break 语句或 switch 语句结束。

  • switch 语句的嵌套: switch 语句可以嵌套在其他 switch 语句中,但是需要注意代码的可读性和复杂性。

  • case 标签和表达式的范围: switch 语句的 case 标签可以是整数常量表达式,但不能是浮点数或字符串。

流程图 

实例: 

#include <stdio.h>
 
int main ()
{
   /* 局部变量定义 */
   char grade = 'B';
 
   switch(grade)
   {
   case 'A' :
      printf("很棒!\n" );
      break;
   case 'B' :
   case 'C' :
      printf("做得好\n" );
      break;
   case 'D' :
      printf("您通过了\n" );
      break;
   case 'F' :
      printf("最好再试一下\n" );
      break;
   default :
      printf("无效的成绩\n" );
   }
   printf("您的成绩是 %c\n", grade );
 
   return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

做得好
您的成绩是 B

Switch语句实例  :

使用 switch 语句编程,根据输入的年份判断是否为闰年,根据输入的月份判断这月有多少天。

闰年的定义:

  •  普通年(不能被100整除的年份)能被4整除的为闰年。(如2004年就是闰年,1999年不是闰年);
  •  世纪年(能被100整除的年份)能被400整除的是闰年。(如2000年是闰年,1900年不是闰年);
#include <stdio.h>

int main()
{
    int year, month, flag = 0;
    printf("请输入年份和月份,以空格间隔:!\n");
    scanf("%d %d", &year, &month);
    if( ( year % 4 ==0 && year % 100 != 0 ) || year % 400 ==0)
    {
        flag = 1;
        printf("您所输入的年份是闰年\n"); 
    }
    else
    {
        flag = 0; 
        printf("您所输入的年龄是平年!!\n");
    }
    switch(month)
    {
        case 1:
            printf("您所输入的是一月共31天\n");
            break;
        case 2:
            if(flag == 1) 
                printf("您所输入的是二月共29天\n");
            else
                printf("您所输入的是二月共28天\n"); 
            break;
        case 3:
            printf("您所输入的是三月共31天\n");
            break;
        case 4:
            printf("您所输入的是四月共30天\n");
            break;
        case 5:
            printf("您所输入的是五月共31天\n");
            break;
        case 6:
            printf("您所输入的是六月共30天\n");
            break;
        case 7:
            printf("您所输入的是七月共31天\n");
            break;
        case 8:
            printf("您所输入的是八月共31天\n");
            break;
        case 9:
            printf("您所输入的是九月共30天\n");
            break;
        case 10:
            printf("您所输入的是十月共31天\n");
            break;
        case 11:
            printf("您所输入的是十一月共30天\n");
            break;
        case 12:
            printf("您所输入的是十二月共31天\n");
            break;
    }
    return 0;
}

Hello,各位读者朋友们你们好,欢迎来到 从0至1 的CSDN博客。

一个喜欢文学的理科男,欢迎大家关注我的矩阵平台!

欢迎关注我的短视频矩阵:

微信公众平台:从0至1

今日头条:从0至1

百家号(百度APP):小飞从0至1

抖音:从0至1

小红书:从0至1

知乎:从0至1

CSDN:https://blog.csdn.net/m0_64000959?spm=1000.2115.3001.5343

Gitee:https://gitee.com/from-0-to-1

后续继续更新......

  • 17
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值