第一题 求出0~999之间的所有“水仙花数”并输出。
首先要了解什么是水仙花数,水仙花数就是在数论中,水仙花数也称为自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数,是指一N位数,其各个数之N次方和等于该数。
例如153、370、371及407就是三位数的水仙花数,其各个数之立方和等于该数:
153 = 1^3 + 5^3 + 3^3。
370 = 3^3 + 7^3 + 0^3。
371 = 3^3 + 7^3 + 1^3。
407 = 4^3 + 0^3 + 7^3。
int main()
{
int i, j, k, n;
printf("0-999之间的水仙花数有:");
for (n = 0; n <= 999; n++)
{
if (n < 10)//0-10
{
printf("%d\n", n);
}
else if (n < 100)//10-99
{
i = n / 10;
j = n % 10;
if (n == i*i + j*j)
{
printf("%d\n", n);
}
}
else//100-999
{
i = n / 100;
j = (n - i * 100) / 10;
k = n - i * 100 - j * 10;
if (n == i*i*i + j*j*j + k*k*k)
{
printf("%d\n", n);
}
}
}
return 0;
}
第二题 求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字。
int main()
{
int i = 0;
int sn = 0;
int t = 0;
int a,n;
printf("输入a的值和n的次数:");
scanf("%d %d", &a,&n);
for (i = 0; i <n; i++)
{
t = t + a;
a = a * 10;
sn = sn + t;
}
printf("sn的值:%d\n", sn);
return 0;
}
第三题 编写代码模拟三次密码输入的场景。 最多能输入三次密码,密码正确,提示“登录成功”,密码错误,可以重新输入,最多输入三次。三次均错,则提示退出程序。
在写这个程序时要注意的是“==”是不能用来比较两个字符串是否相等的,必须使用一个库函数strcmp。
int main()
{
char password[10] = { 0 };
int i = 0;
for (i = 0; i <3; i++)
{
printf("请输入密码:");
scanf("%s", password);
if (strcmp(password ,"123456")==0)
{
printf("登陆成功!\n");
break;
}
else
{
printf("密码错误\n");
}
}
if (i == 3)
printf("三次密码均错误,请退出程序\n");
return 0;
}
第四题 写代码可以在整型有序数组中查找想要的数字,找到了返回下标,找不到返回-1。
本题可以使用二分查找的方法,先对给定的数组求长度,数组的最左边就是下标为0的地方,最右边下标就是数组的长度sz-1。判断只有当数组的左边小于右边时才能进行下一步查找,因为数组的大小是从左往右从小到大,然后定义一个数组的中下标为mid=(left+right)/2,判断当这个中间下标大于我们要找的那个数k的下标时(arr[mid]>k),所以right=mid-1,同理当arr[mid]<k时,left=mid+1。
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int k;
printf("输入一个要查找的数:");
scanf("%d", &k);
int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0;
int right = sz - 1;
while (left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] > k)
{
right = mid - 1;
}
else if (arr[mid] < k)
{
left = mid + 1;
}
else
{
printf("找到了,下标是:%d\n", mid);
break;
}
}
if (left = right)
printf("%d\n", -1);
return 0;
}
ps:昨天亲戚店要开张,去做了一天的苦力,晚上回去洗洗倒头就睡了,今天就多学一会,多做一题,加油!