指定数组折半法查找元素; 输出水仙花数; 输出*****的指定形状

问题 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;
}

发布了21 篇原创文章 · 获赞 2 · 访问量 876

猜你喜欢

转载自blog.csdn.net/weixin_44132627/article/details/103063742