水仙花数,完数, 分数数列求和问题,猴子吃桃问题,多个字符从两端向中间汇聚,二分查找法

题目:输出所有的“水仙花数”,所谓的“水仙花数"是指一个3位数,其各位数字立方和等于该数本身。
代码:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(){
	int temp[3];
	printf("水仙花数:");
	水仙花数是3位数直接设置范围为[100,999]
	for (int i = 100; i <= 999; i++){
		int p = i,a=0;
		//求各个位的立方和是不是和这个数本身相等
         for (int j=0; j < 3; j++,p/=10){
			//153%10=3 153/10%10=3 153/100%10=1
			temp[j] = p % 10;
			//printf("%d", temp[j]);
			a = a+pow(temp[j],3);
			//printf("%d", a);
		}
		if (a == i){
			printf("%5d", i);
			}
	}
	system("pause");
	return 0;
}

结果:
在这里插入图片描述
题目:如果一个数恰好等于它的因子之和,这个数就称为”完数“。例如,6的因子是1,2,3而6=1+2+3,因此6是"完数"。编程找出1000之内的所有完数
代码:

#include<stdio.h>
#include<stdlib.h>
int main(){
	for (int i = 1; i <= 1000; i++){
		int k = 0;
		//找一个数的因子,例如6(在此题中因子不含本数),6%1=0 6%2=0 6%3=0 所以因子为1,2,3且1+2+3=6可知是完数
		for (int j = 1; j <i; j++){
			if (i%j == 0){
				k += j;
			}
		}
		//判断因子之和是否等于本身
		if (k == i){
			printf("%d is 完数\n",i);
		}
	}
    system("pause");
	return 0;
}

结果:
在这里插入图片描述
题目:有一个分数数列,2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列前20项的和
代码:

#include<stdio.h>
#include<stdlib.h>
int main(){
	//找规律发现后一个数的分母等于前一个数的分子,而后一个数的分子等于前一个数字分子和分母之和
	double a = 1, b = 2, count = 0;
	for (int i = 0; i <5; i++){
		count += (b / a);
		//分子改变
		b= (a + b);
		//分母改变
		a= (b-a);
	}
	printf("sum is:%lf", count);
	system("pause");
	return 0;
}

结果:
在这里插入图片描述
题目:猴子吃桃问题,第一天摘下若干个桃子,当即吃了一半,还不过瘾,有多吃了一个。第二天早上又将剩下的桃子吃了一又有多吃了一个。以后每天都吃了前一天剩下的一半零一个,到第十天想吃时,就只剩下一个,问第一天一共摘了多少个桃子
代码:

#include<stdio.h>
#include<stdlib.h>
int main(){
	//由题目可得若前一天有x个桃子,则第二天剩(x/2)-1个桃子,则反过来若后一天剩a个桃子,前一天有2*(a+1)个桃子
	int a = 0,b=1;
	for (int i = 1; i < 10; i++){
		b = 2 * (b + 1);
	}
	printf("第一天一共摘了:%d个桃子\n", b);
    system("pause");
	return 0;
}

结果:
在这里插入图片描述
题目:编写代码,演示多个字符从两端移动向中间汇聚
代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
	char a[] = { "hello word" };
	char b[] = { "##########" };
	int left = 0, right = strlen(a) - 1;
	while (left <= right){
		b[right] = a[right];
		b[left] = a[left];
		left++;
		right--;
		printf("%s\n", b);
	}
	system("pause");
	return 0;
}

结果:
在这里插入图片描述
题目:在一个有序数组中查找某个数x,要求二分查找法,有就返回下标,没有就返回-1
代码:

#include<stdio.h>
#include<stdlib.h>
//注意二分查找法序列必须是有序的,不然不能使用这个方法
int binarySearch(int arr[], int x, int n){
//left表示数组元素起始下标,right表示数组元素终止下标
//初始寻找区域为[right,left]
	int left = 0, right = n - 1,middle=0;
//当left==right表示从两边寻找目标元素到了最后一个元素
	while (left <= right){
		middle = (right + left) / 2;
//若目标元素小于中间元素,又因为此数组为升序,则只可能处于左边部分改变寻找区域为[left,middle-1]
		if (x < arr[middle]){
			right = middle - 1;
		}
//若目标元素大于中间元素,又因为此数组为升序,则只可能处于右边部分改变寻找区域[middle+1,right]
		else if (x>arr[middle]){
			left = middle + 1;
		}
//若相等则直接返回下标
		else {
			return middle; }
}
	return -1;
}

int main(){
	int arr[10] = { 0, 2, 4, 6, 8, 9, 10, 11, 22, 24 };
	int p=binarySearch(arr, 6, 10);
	printf("the index is: %d", p);
	system("pause");
	return 0;

}

结果:
在这里插入图片描述
结语:若有不足,请多指教。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值