C语言百日刷题第二天

时间:2021-04-27 00:37:26

尼科彻斯定理

验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。

例如:

1^3=1

2^3=3+5

3^3=7+9+11

4^3=13+15+17+19

输入一个正整数m(m≤100),将m的立方写成m个连续奇数之和的形式输出。

数据范围:

C语言百日刷题第二天

C语言百日刷题第二天


ps:一开始写的时候想暴力法,傻傻的去写,后面写着发现规律,发现是数学题的代码实现而已。

#include <stdio.h>

int main() {
int n=0;
scanf("%d\n",&n);

int all =n*n*n;
int a0;
a0=n*n-n+1;
int arr1=a0;
for(int i=1,arr1=a0;i<=n;i++,arr1+=2)
{
if(i<=n-1)
{
printf("%d+",arr1);
}
else if(i>n-1)
{
printf("%d\n",arr1);
}
}

return 0;
}

旋转数组的最小数字

有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。


数据范围:

C语言百日刷题第二天

,数组中任意元素的值: 

C语言百日刷题第二天


/**
*
* @param rotateArray int整型一维数组
* @param rotateArrayLen int rotateArray数组长度
* @return int整型
*/
int minNumberInRotateArray(int* rotateArray, int rotateArrayLen )
{
// write code here
int left=0;
int right=rotateArrayLen-1;
if(rotateArrayLen>2)
{
while(left+1<right)
{
if(*(rotateArray+left)<*(rotateArray+right))
{
right--;
}
if(*(rotateArray+left)>*(rotateArray+right))
{
left++;
}
if(*(rotateArray+left)==*(rotateArray+right))
{
left++;
}
}
}
if(rotateArrayLen<2)
{
return *(rotateArray+left)>*(rotateArray+right)?*(rotateArray+right):*(rotateArray+left);
}
if(*(rotateArray+left)==*(rotateArray+right))
{
return *(rotateArray+left);
}
else
{
return *(rotateArray+left)>*(rotateArray+right)?*(rotateArray+right):*(rotateArray+left);

}

}

密码检查

小明同学最近开发了一个网站,在用户注册账户的时候,需要设置账户的密码,为了加强账户的安全性,小明对密码强度有一定要求:

  1. 密码只能由大写字母,小写字母,数字构成;
  2. 密码不能以数字开头;
  3. 密码中至少出现大写字母,小写字母和数字这三种字符类型中的两种;
  4. 密码长度至少为8

现在小明受到了n个密码,他想请你写程序判断这些密码中哪些是合适的,哪些是不合法的。


#include <stdio.h>
#include<string.h>
int main() {
int n=0;
scanf("%d\n",&n);
char arr[101]={'0'};
int i=0 ,j=0;
for(i=0;i<n;i++)
{
int flag=0;
int flag1=0;
int flag2=0;

scanf("%s",arr);
int sz=strlen(arr);


if(arr[0]>='0'&&arr[0]<='9'||sz<8)
{
printf("NO\n");
continue;
}
for(j=0;j<sz;j++)
{
if(arr[j]>='a'&&arr[j]<='z')
{
flag=1;

}
else if(arr[j]>='A'&&arr[j]<='Z')
{
flag1=1;
}
else if(arr[j]>='0'&&arr[j]<='9')
{
flag2=1;

}
else{
printf("NO\n");
}

}
if(flag+flag1+flag2>=2)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}

return 0;
}

图片整理

Lily上课时使用字母数字图片教小朋友们学习英语单词,每次都需要把这些图片按照大小(ASCII码值从小到大)排列收好。请大家给Lily帮忙,通过代码解决。

Lily使用的图片使用字符"A"到"Z"、"a"到"z"、"0"到"9"表示。


数据范围:每组输入的字符串长度满足 

C语言百日刷题第二天


思路:库函数的熟练使用 ,qsort快速排序,可以去看看qsort底层实现原理。

#include <stdio.h>
#include<stdlib.h>
#include<string.h>
int comp(const void *a, const void *b)
{
return *(char *)a - *(char *)b;
}
int main()
{
char str[1001];
while(scanf("%s", str) != -1) {
int n = strlen(str);
qsort(str, n, sizeof(char), comp);
printf("%s\n", str);
}
return 0;
}


面试题 整数转换​

整数转换。编写一个函数,确定需要改变几个位才能将整数A转成整数B。

示例1:

输入:A = 29 (或者0b11101), B = 15(或者0b01111)
输出:2

示例2:

输入:A = 1,B = 2
输出:2

提示:

  1. A,B范围在[-2147483648, 2147483647]之间
int convertInteger(int A, int B){
int tmp =A^B;
int count = 0;
for(int i =0; i < 32; i++)
{
if((tmp>>i)&1 ==1)
{
count++;
}
}
return count;
}