题目:输出所有的“水仙花数”,所谓的“水仙花数"是指一个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;
}
结果:
结语:若有不足,请多指教。