小红的循环移位

简介: 小红的循环移位

题目描述:小红拿到了一个数字串,她每次操作可以使得其向左循环移动一位。将串 s=s0 s1...sn−1s  向左循环移动一位,将得到串s1...sn−1s0。小红想知道,使得该数字串变成4的倍数,需要最少操作多少次?(可以包含前导零)

输入描述:一个数字串,长度不超过10510^5105

输出描述:如果无法达成目的,则输出-1。否则输出一个整数,代表最少的操作次数。

 

#include<iostream>
#include<string.h>
using namespace std;
const int N=1e5+5;
int main(){
char s[N];
int a[N],n;
  char c = getchar();
  while(c < '0' || c > '9')
    c = getchar();
  while(c >= '0' && c <= '9')
    a[++n] = (c - '0'),c = getchar();
  if(n == 1)
  {
    if(a[1] % 4)
    {
      cout << -1;
      return 0;
    }else{
      cout << 0;
      return 0;
    }
  }
  if((a[n - 1] * 10 + a[n]) % 4 == 0)
  {
    cout << 0;
    return 0;
  }
  if((a[n] * 10 + a[1]) % 4 == 0)
  {
    cout << 1;
    return 0;
  }
  for(int i = 1;i < n;i++) 
        if((a[i] * 10 + a[i + 1]) % 4 == 0)
  {
    cout << i + 1;
    return 0;
  }
  cout << -1;
  return 0;
}
  1. 首先定义了一些常量和变量:
  • const int N = 1e5 + 5;:用于存放输入字符串的最大长度。
  • char s[N];:定义一个字符数组来存放输入的字符串,但由于代码并未使用此数组,所以在此处可忽略。
  • int a[N];:定义一个整数数组用来存放读取到的每个字符转换成的整数值。
  • int n;:记录当前读取到的有效数字字符的数量。
  1. 使用getchar()逐个读取字符直到遇到第一个数字字符,并将其转换为整数值存入数组a[]中,同时更新计数器n
  2. 如果只读取到一个数字字符(n == 1),直接判断这个数字是否能被4整除,如果能,则输出0,否则输出-1。
  3. 接下来检查最后两位数字是否能被4整除,如果能,则输出0。
  4. 然后检查首位数字与末尾数字组合起来是否能被4整除,如果能,则输出1。
  5. 使用一个for循环遍历数组a[],检查每一对相邻的数字(a[i]a[i+1])是否能被4整除。如果找到满足条件的一对,则输出它们的位置i + 1,并结束程序。
  6. 如果经过以上所有步骤都没有找到符合条件的数对,则输出-1。
目录
相关文章
|
10月前
hdoj 4554 叛逆的小明
printf("%d %d\n", a+b, a-b); }
32 0
|
3月前
小红的矩阵构造
小红的矩阵构造
31 1
|
3月前
小红的白色字符串
小红的白色字符串
21 0
|
算法
有一身份证号,判断此为男还是女,基于此方法,写一个算法,判断此身份证号为男还是女, 身份证的倒数第2位若为偶数是女,反之为男。(身份证分15位和18位)
有一身份证号,判断此为男还是女,基于此方法,写一个算法,判断此身份证号为男还是女, 身份证的倒数第2位若为偶数是女,反之为男。(身份证分15位和18位)
113 0
|
C++
201812-2小明放学
201812-2小明放学
73 0
201812-2小明放学
Fiven 李亚男
这是一次专业课课堂考核作业
|
C++
201812-1小明上学
201812-1小明上学
65 0
201812-1小明上学
|
Web App开发 程序员 Python
对于IT男的表白方式,你可能存在什么误解
今天随手翻UC,看到一个关于程序猿520表白的段子。 虽然是17年的老梗,但当时帖子比较火名为“她根本配不上我这么聪明的男人!” [段子链接] 段子是一张长图,想想最近比较无聊,拿它做个Python的练习题呗。
116 0