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个连续奇数之和的形式输出。
数据范围:
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]这样的。请问,给定这样一个旋转数组,求数组中的最小值。
数据范围:
,数组中任意元素的值:
/**
*
* @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);
密码检查
小明同学最近开发了一个网站,在用户注册账户的时候,需要设置账户的密码,为了加强账户的安全性,小明对密码强度有一定要求:
- 密码只能由大写字母,小写字母,数字构成;
- 密码不能以数字开头;
- 密码中至少出现大写字母,小写字母和数字这三种字符类型中的两种;
- 密码长度至少为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"表示。
数据范围:每组输入的字符串长度满足
思路:库函数的熟练使用 ,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
提示:
- 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语言百日刷题第二天的主要内容,如果未能解决你的问题,请参考以下文章