C语言百日刷题第二天

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言百日刷题第二天相关的知识,希望对你有一定的参考价值。

尼科彻斯定理

验证尼科彻斯定理,即:任何一个整数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语言百日刷题第二天_#include

C语言百日刷题第二天_#刷题_02


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语言百日刷题第二天_#刷题_03

,数组中任意元素的值: 

C语言百日刷题第二天_#刷题_04


/**
*
* @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语言百日刷题第二天_数组_05


思路:库函数的熟练使用 ,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;

以上是关于C语言百日刷题第二天的主要内容,如果未能解决你的问题,请参考以下文章

csp刷题第一周

LeetCode刷题第一周

LeetCode刷题模版:11 - 20

LeetCode刷题模版:11 - 20

『百日百题 · SQL篇』备战面试,坚持刷题—— 高级查询

Pat刷题第一周