输入一串字符,若是二进制则求其模五的值。

要求:1、若输入的字符包含除0、1以外的值,则输出:invalid

2、若输入的为二进制字符串,则输出所计算的其模五的值

3、若其输入字符均为0、1,但是第一个输入的字符为0则输出:irregular

思路:可以参照所学的形式语言与自动机理论里面的自动机思想来做题:通过对输入的字符进行一个个的判断,从而输出所求的值,根据相应的状态再进行输出。

根据题意可以判断出非0、1外的输入都是invalid,所以可以根据这个特点设定它的开始状态state=invalid,后面根据输入字符判断,建议在做题目前可以先画自动机状态图,这样有助于理清思路,避免写的时候出现思绪混乱。另外值得注意的是输入的字符串可能一开始是0、1组成,后面就是其他字符再加0、1组成的字符串的情况,这个时候是invalid状态,若像我这样写的就一定要注意跳到break了,不然会导致判断错误,所以一定要注意到这个情况。

这个题也可以用if...else  if...else...等语句嵌套,也可以不用宏定义每个状态值,直接用1、2、3、4.。。。等等数字作为状态,只要语法无错误都可。

 #include<stdio.h>
#define x0 0
#define x1 1
#define x2 2
#define x3 3
#define x4 4
#define x5 5
#define invalid 6
#define irregular 7
int FA(int state,char input);
int main()
{
char a[];
int state,i=;
gets(a);
state=invalid;
while(a[i]!='\0')
{
state = FA(state,a[i]);
i++;
if (state==invalid)
break;
}
if (state==x0 || state==)
printf("0\n");
else if (state==x1)
printf("1\n");
else if (state==x2)
printf("2\n");
else if (state==x3)
printf("3\n");
else if (state==x4)
printf("4\n");
else if (state==)
printf("invalid\n");
else if (state== )
printf("irregular\n");
return ;
}
int FA(int state, char input)
{
switch(state)
{
case invalid:
if(input == '') state=x1;
else if(input == '') state=x5;
else state=invalid;
break;
case x0:
if(input == '') state=x1;
else if(input == '') state=x0;
break;
case x1:
if(input == '') state=x3;
else if(input == '') state=x2;
else state=invalid;
break;
case x2:
if(input == '') state=x0;
else if(input == '') state=x4;
else state=invalid;
break;
case x3:
if(input == '') state=x2;
else if(input == '') state=x1;
else state=invalid;
break;
case x4:
if(input == '') state=x4;
else if(input == '') state=x3;
else state=invalid;
break;
case x5:
if(input == '' || input == '') state=irregular;
else state=invalid;
break;
case irregular:
if(input == '' || input == '') state=irregular;
else state=invalid;
break;
}
return state;
}

C语言:二进制模5的更多相关文章

  1. CAD从二进流加载数据(com接口VB语言)

    主要用到函数说明: MxDrawXCustomFunction::ReadBinStreamEx 从二进流加载数据,详细说明如下: 参数 说明 IMxDrawBinStream* pBinStream ...

  2. CAD把当前图上数据保存为一个二进流对象(com接口VB语言)

    主要用到函数说明: MxDrawXCustomFunction::WriteBinStreamEx 把当前图上数据保存为一个二进流对象,详细说明如下: 参数 说明 LPCTSTR pszPasswor ...

  3. 【Java】 剑指offer(14) 二进制中1的个数

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请实现一个函数,输入一个整数,输出该数二进制表示中1的个数.例如把 ...

  4. java语言基础-进制

    一丶Java语言基础:进制 1.进制的四种表现形式 (1).二进制:0,1 满2进1. (2).八进制0-7 :满8进1,用0开头表示. (3).十进制:0-9 满10进1. (4).十六进制:0-9 ...

  5. 统计无符号整数二进制中1的个数(Hamming weight)

    1.问题来源 之所以来记录这个问题的解法,是因为在在线编程中经常遇到,比如编程之美和京东的校招笔试以及很多其他公司都累此不疲的出这个考题.看似简单的问题,背后却隐藏着很多精妙的解法.查找网上资料,才知 ...

  6. [LeetCode] Binary Watch 二进制表

    A binary watch has 4 LEDs on the top which represent the hours (0-11), and the 6 LEDs on the bottom ...

  7. 剑指Offer面试题:9.二进制中1的个数

    一.题目:二进制中1的个数 题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数.例如把9表示成二进制是1001,有2位是1.因此如果输入9,该函数输出2. 二.可能引起死循环的解法 一个 ...

  8. c语言二维数组传递

    c语言二维数组传递,目前我总结三种方法,以及纠正一个不能使用的方法 /********************************* * 方法1: 第一维的长度可以不指定 * * 但必须指定第二维 ...

  9. 剑指Offer:二进制中1的个数

    题目:输入一个整数,输出该数二进制表示中1的个数. // 二进制中1的个数 #include <stdio.h> int wrong_count_1_bits(int n) // 错误解法 ...

随机推荐

  1. Ansible------常用功能

    local_action Ansible 默认只会对控制机器执行操作,但如果在这个过程中需要在 Ansible 本机执行操作就需要使用到local_action become:True Ansible ...

  2. Redis 如何实现持久化

    1.RDB 持久化,将 Redis 在内存中的的状态保存到硬盘中,相当于备份数据库状态. 2.AOF 持久化(Append-Only-File),AOF 持久化是通过保存 Redis 服务器锁执行的写 ...

  3. Struts2优缺点

    优点: (1)  实现了MVC模式,层次结构清晰,使程序员只需关注业务逻辑的实现. (2)  丰富的标签库,大大提高了开发的效率. (3) Struts2提供丰富的拦截器实现. (4) 通过配置文件, ...

  4. spring面向切面编程示例(xml配置形式vs@注解形式)

    一.xml配置形式 1.在Spring配置文件中增加面向切面配置当调用com.activemq.service.impl.ConsumerServiceImpl接口实现类的任意方法时执行切面类中的方法 ...

  5. RDay2-Problem 1 A

    题目描述 初始给你一个排列p[i],你可以执行以下操作任意多次. 选择一个i,交换p[i]和p[i+1]的值(其实就是交换排列当中两个相邻的元素). 我们现在希望对于任意的i满足p[i]不等于i,求最 ...

  6. Python虚拟环境的安装与使用

    通过virtualenv创建 首先安装virtualenv:pip3 install virtualenv 安装完成之后cd到合适的目录下键入命令: virtualenv 虚拟环境名称 (创建纯净的虚 ...

  7. class-dump 安装使用详解

    顾名思义,它的作用就是把Mach-O文件的class信息给dump出来(把类信息给导出来),生成对应的.h头文件 官方地址:http://stevenygard.com/projects/class- ...

  8. 使用CompletionService结合ExecutorService批处理调用存储过程任务实例

    此实例为java多线程并发调用存储过程实例,只做代码记载,不做详细描述 1.线程池构造初始化类CommonExecutorService.java package com.pupeiyuan.go; ...

  9. pta总结1

    7-1 打印沙漏 (20 分) 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 所谓"沙漏形状",是指每行输出奇数个符 ...

  10. [转]安装v2ray,部署手机电脑***

    https://www.coding996.com/digitalocean-build-v2ray-0-1/https://blog.verkey.org/209.html 环境信息 服务器系统:C ...