判断字符串旋转
代码1:
#include <stdio.h>
#include <string.h>
//把字符串向左旋转一个字符
void left_move(char* arr)
{
int len = strlen(arr);
char tmp = arr[0];
int i = 0;
for (i = 0; i < (len - 1); i++)
{
arr[i] = arr[i + 1];
}
arr[len - 1] = tmp;
}
int is_left_move(arr1, arr2)
{
int len1 = strlen(arr1);
int len2 = strlen(arr2);
if (len1 != len2)
{
return 0;
}
//将字符串向左旋转1,2,3....位
int i = 0;
for (i = 1; i <= len1; i++)
{
left_move(arr1);
if (strcmp(arr1, arr2) == 0)
{
return 1;
}
}
return 0;
}
int main()
{
char arr1[] = "abcdefgh";
char arr2[] = "defghakc";
if (is_left_move(arr1, arr2))
{
printf("Yes\n");
}
else
{
printf("No\n");
}
return 0;
}
附:
代码2:
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[20] = "abcdef";
char arr2[20] = "cbdefa";
int len1 = strlen(arr1);
int len2 = strlen(arr2);
if (len1 != len2)
{
printf("No\n");
}
else
{
strncat(arr1, arr1, len1);
if (strstr(arr1, arr2) != NULL)
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
return 0;
}
附:
数组最大连续1的个数
https://leetcode.cn/problems/max-consecutive-ones/
代码1:
int findMaxConsecutiveOnes(int* nums, int numsSize)
{
int count=0;
int maxcount=0;
//
int i=0;
for (i=0;i<numsSize;i++)
{
if (*(nums+i)==1)
{
count++;
}
else
{
maxcount=maxcount>count?maxcount:count;
count=0;
}
}
maxcount=maxcount>count?maxcount:count;
return maxcount;
}
附:
完全数计算
#include <stdio.h>
#include <math.h>
int main()
{
int count = 0;
int n = 0;
scanf("%d", &n);
int i = 0;
for (i = 2; i <= n; i++)
{
//对于每一个i
int sum = 0;
int j = 0;
for (j = 2; j <= sqrt(i); j++)
{
if (i % j == 0)
{
sum += (j + i / j);
}
}
if (sum + 1 == i)
{
count++;
}
}
printf("%d\n", count);
return 0;
}
附:
数字颠倒
代码1:
#include <stdio.h>
#include <string.h>
int main()
{
char arr[1000]={0};
scanf("%s",arr);
int sz=strlen(arr);
int i=0;
for (i=sz-1;i>=0;i--)
{
printf("%c",arr[i]);
}
return 0;
}
代码2:
#include <stdio.h>
int main()
{
int num=0;
scanf("%d",&num);
if (num==0)
{
printf("%c",'0');
}
else
{
while(num)
{
printf("%c",'0'+num%10);
num/=10;
}
}
return 0;
}
附:
单词倒排
代码:
#include <stdio.h>
#include <string.h>
void reverse(char* p1, char* p2)
{
while(p1<p2)
{
char tmp=*p1;
*p1=*p2;
*p2=tmp;
p1++;
p2--;
}
}
int main()
{
char arr[10000]={0};
gets(arr);
int sz=strlen(arr);
int count=0;
//
char arr1[10000]={0};
int k=0;
//
int i=0;
for (i=sz-1;i>=0;i--)
{
if (((*(arr+i)>='A')&&(*(arr+i)<='Z'))||((*(arr+i)>='a')&&(*(arr+i)<='z')))
{
count=0;
arr1[k++]=*(arr+i);
}
else if (count==0)
{
count++;
arr1[k++]=' ';
}
}
arr1[k]='\0';
char* str;
if (arr1[0]==' ')
str=arr1+1;
else
str=arr1;
for (i=0;i<k;i++)
{
if (*(arr1+i)==' ')
reverse(str,arr1+i-1);
else if (*(arr1+i-1)==' ')
str=arr1+i;
}
if (*(arr1+k-1)!=' ')
reverse(str,arr1+k-1);
printf("%s\n",arr1);
return 0;
}
附: