指定数组折半法查找元素; 输出水仙花数; 输出*****的指定形状
程序员文章站
2023-12-27 21:46:03
...
问题 1 . 在指定数组中采用折半法查找元素
其代码实现如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int Binarysearch(int arr[], int size, int tofind) { //自定义函数
int left = 0;
int right = size - 1;
int count = 0;
while (left <= right) {
count++; //记录查找次数
int mid = (left + right) / 2; // 中间元素
if (arr[mid] > tofind)
right = mid - 1;
else if (arr[mid] < tofind)
left = mid + 1;
else if (arr[mid] == tofind){
printf("找到了arr[%d] = %d\n", mid,tofind);
printf("%d次查找\n", count);
return 1;
}
}
printf("没有找到\n"); // 循环结束后未找到,则输出未找到
return 0;
}
int main() {
int arr[] = { 0,2,5,7,9,10,11,15 };
int size = sizeof(arr) / sizeof(arr[0]);
int ret = Binarysearch(arr, size, 1);
system("pause");
}
问题 2. 输出水仙花数。
问题说明:“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身,如;153=1+5+3?,则153是一个“水仙花数”。
代码实现如下:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main() {
int i = 0;
for (i = 0; i <= 999; i++) {
int count = 1;
int num = i;
int sum = 0;
while (num / 10) {
count++;
num = num / 10;
}
num = i;
while (num) {
sum += pow(num % 10, count);
num = num / 10;
}
if (sum == i) {
printf("%d ", sum);
}
}
system("pause");
return 0;
}
问题 3.在屏幕上输出以下图案:
*
***
*****
*******
*********
***********
*************
***********
*********
*******
*****
***
*
问题解析:输出分两部分,先输出上班部分,后输出下班部分。其代码实现如下
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main() {
int i, j, n; // n为要输出的行数值得一半
scanf("%d", &n);
for (i = 1; i < 2 * n - 1; i = i + 2) {
for (j = 2*n; j > 2 * n - i; j--) {
printf("*");
}
printf("\n"); // 打印上半部分
}
for (i = 0; i < 2*n; i = i+2) {
for (j = 1; j < 2*n-i; j++) {
printf("*");
}
printf("\n"); //打印下半部分
}
system("pause");
return 0;
}