尼科彻斯定理
验证尼科彻斯定理,即:任何一个整数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,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;
}