-
输出100到200之间的素数,素数就是除了1和他本身外,不能被其他数整除的数
void isprime()
{
int i = 0;
int count = 0;
for (i = 100; i <= 200; i++)
{
int j = 0;
for (j = 2; j <=i; j++)
{
if (i%j == 0)
{
break;
}
}
if (i == j)
{
count++;
printf(“%d”, i);
}
}
printf(“\ncount=%d\n”, count);
}
2. void is_reapyear()//闰年是能被4整除,但不能被100整除的数或者是可以被400整除的数,此代码省略了。
3. 二分查找法
int bin_search(int arr[], int left, int right, int key)
{
int mid = 0;
while (left <= right)
{
mid = (left + right) >> 1;//箭头朝哪边就向哪边移,右移1位,即就是除以2
if (arr[mid] > key)
{
right = mid - 1;
}
else if (arr[mid] < key)
{
left = mid + 1;
}
else
return mid;//找到了,返回下标
}
return -1;//找不到
}
4
猜数字游戏
void menu()
{
printf(“*********”);
printf(“1.play\n”);
printf(“***0.exit**\n”);
}
void game()
{
int random_num = rand() % 100 + 1;
int input = 0;
while (1)
{
printf(“请输入猜的数字>:”);
scanf(“%d”, &input);
if (input > random_num)
{
printf(“猜大了\n”);
}
else if (input < random_num)
{
printf(“猜小了\n”);
}
else
{
printf(“恭喜你,猜对了\n”);
break;
}
}
}
int main()
{
int input = 0;
srand((unsigned)time(NULL));
do
{
menu();
printf(“请选择>:”);
scanf(“%d”, &input);
switch (input)
{
case 1:
game();
break;
case 0:
break;
default:
printf(“选择错误,请重新输入!\n”);
break;
}
} while (input);
return 0;
5
int main()//获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列
{
int num = 0;
int i = 0;
int j = 0;
scanf(“%d”, &num);
for (i = 31; i >= 0; i -= 2)
{
printf(“%d”, (num >> i) & 1);//偶数位
}
printf(“\n”);
for (i = 30; i >= 0; i -= 2)
{
printf(“%d”, (num >> i) & 1);//奇数位
}
system(“pause”);
return 0;
}
6.输出一个整数的每一位
int main()
{
int num = 0;
int low = 0;
printf(“请输入一个整数: “);
scanf(“%d”, &num);
while (num > 0)
{
low = low % 10;
printf(“%d”,low);
num /= 10;
}
system(“pause”);
return 0;
}
7 两个整数m和n的二进制表达中,有多少个位不同
int main()
{
int m = 1999;
int n = 2299;
int c = m^n;
int count = 0;
while (c)
{
if (c % 2 == 1)
{
count++;
}
c = c / 2;
}
printf(“这两个数中有%d个位不同\n”, count);
printf(“FILE:%s\nLINE:%d\nDATE:%s\nTIME:%s\n”, FILE, LINE, DATE, TIME);
system(“pause”);
return 0;
}
8.不使用(a+b)/2这种方式,求两个数的最大值
答:主要方法,(a+b)>>1,这种算法会存在溢出,b+((a-b)>>1));(a&b)+((a^b)>>1));
9.一组数据中只有一个数字出现了一次,其它数字都是成对出现的,使用位运算
int main()
{
int arr[] = { 1, 1, 2, 3, 4, 5, 6, 7 };
int num = sizeof(arr) / sizeof(arr[0]);
int i = 0;
int ret = arr[0];
for (; i < num; i++)
{
ret ^= arr[i];//重点;
}
printf(“%d\n”, ret);
}
10.有一个字符数组的内容为“student a am i”,请你将数组的内容改为”i am a student”,不能使用库函数,只能开辟有限的空间(空间个数和字符串的长度无关)
int my_strlen(const char *str)
{
assert(str);
int len = 0;
while (*str++)
{
len++;
}
return len;
}
void reverse(char *start, char *end)
{
assert(start);
assert(end);
while (start < end)
{
char tmp = *start;
*start = *end;
*end = tmp;
start++;
end–;
}
}
void str_reverse(char *str)
{
assert(str);
int len = my_strlen(str);
reverse(str, str + len - 1);
while (*str != ‘\0’)
{
char*p = str;
while ((*str != ’ ‘) && (*str != ‘\0’))
{
str++;
}
reverse(p, str - 1);
if (*str != ‘\0’)
{
str++;
}
}
}
11. 输入一个整数数组,实现一个函数,来调整数组中数字的顺序,使得数组中所有的奇数位位于数组的前半部分,所有偶数位于数组的后半部分
void Move(int arr[], int sz)
{
int left = 0;
int right = sz - 1;
while (left < right)
{
int tmp = 0;
while ((left < right) && arr[left] % 2 == 1)//1.左边找偶数
{
left++;
}
while ((left < right) && arr[right] & 2 == 0)//2. 右边找奇数
{
right–;
}
//左右交换
tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right–;
}
}
12. 杨氏矩阵,时间复杂度小于O(N)
int find(int arr[][3], int *x, int *y, int num)
{
int row = 0;
int col = *x - 1;
while ((row < *x) & (col >= 0)){
if (arr[row][col] == num)
{
*x = row + 1;
*y = col + 1;
return;
}
else if (arr[row][col]>num)
{
–col;
}
else
{
++row;
}
}
if ((row > *y - 1) || (col < 0))){
*x = -1;
*y = -1;
printf(“not find\n”);
}
}
13. 实现一个函数,可以左旋字符串中的K个字符
void levo(char *pstr, int SZ, int key)
{
assert(pstr != NULL);
int i = 0;
int j = 0;
for (i = 0; i < key; i++)
{
char tmp = pstr[0];
for (j = 0; j < SZ - 1; j++)
{
pstr[j] = pstr[j + 1];
}
pstr[SZ - 1] = tmp;
}
}