今天的几道简单的题:
1.将数组A中的内容和数组B中的内容进行交换.(数组一样大)
2.计算1/1-1/2+1/3-1/4+1/5........+1/99-1/100的值
3.编写程序数一下1到100的所有整数中出现多少次数字9
有的题可能有很多种方法,在这里我只写了一种或者两种,以及一些小点;
编译环境:vs2013.
1.将数组A中的内容和数组B中的内容进行交换.(数组一样大)
这道题值得注意的有两点:
1)在输入输出数组的时候可以用一个循环也可以用两个循环,在这里我用了两个循环.
2)交换两个数值的时候有下列常见方法:
a:创建一个临时变量来交换(temp = a;a = b;b = temp;)
b:采用加减法 {a = a + b; b = a - b; a = a - b;}
c:采用二进制异或的方法(就是我用的方法,这种方法可以防止数据溢出,用了一次后就爱上了)
(a = a ^ b; b = a ^ b; a = a ^ b;)
#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main()
{
int a[10];
int b[10];
printf("请输入a数组:");
for (int i = 0; i < 10; ++i)
{
scanf("%d", a + i);
}
printf("请输入b数组:");
for (int i = 0; i < 10; ++i)
{
scanf("%d", b + i);
}
for (int i = 0; i < 10; ++i)
{
a[i] ^= b[i];
b[i] ^= a[i]; //采用异或的方法交换具体的两个值
a[i] ^= b[i];
}
printf("交换后a[10]为:");
for (int i = 0; i < 10; ++i)
{
printf("%d ", a[i]);
}
printf("\n");
printf("交换后b[10]为:");
for (int i = 0; i < 10; ++i)
{
printf("%d ", b[i]);
}
printf("\n");
system("pause");
return 0;
}
2.计算1/1-1/2+1/3-1/4+1/5........+1/99-1/100的值
这道题值得注意是:
1)和sum一定要定义为double类型的变量,因为不难想到之后的结果是有小数的,用int的话他就会输出一个整数,肯定是不太正确的.
2)输出的时候一定不要写%d,而要写成%f,int类型才用%d,而double类型应该是%f.
法一: 比较简单,用了一个循环,创建了一个变量t来改变下一项的正负.
#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main()
{
double sum = 0;
int t = 1; //创建一个变量,用来改变下一项的正负.
for (int i = 1; i <= 100; ++i)
{
sum = sum + t*(1.0 / i);
t = -t;
}
printf("%f\n", sum);
system("pause");
return 0;
}
法二:稍复杂一点,里面两个循环,分别计算奇数位和偶数位,最后运算得到结果.
#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main()
{
double sum = 0,sum1 = 0, sum2 = 0;
for (int i = 1; i <= 99; i += 2) //计算奇数位
{
sum1 = sum1 + 1.0 / i;
}
for (int i = 2; i <= 100; i += 2) //计算偶数位
{
sum2 = sum2 + 1.0 / i;
}
sum = sum1 - sum2;
printf("%f\n", sum);
system("pause");
return 0;
}
3.编写程序数一下1到100的所有整数中出现多少次数字9
这道题应该注意的是:
1)判断一个数中有几个9,应该判断它的个位和十位,而不只是个位,所以就要分别判断它的个位和十位判断是否为9.
#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main()
{
int i;
int count = 0;
for (i = 1; i <= 100; ++i)
{
if (i % 10 == 9 | i / 10 == 9) //判断个位
{
count++;
}
}
printf("9出现的次数为:%d\n", count);
system("pause");
return 0;
}
那么我们来想一下,要是我要求一个很大的区间里面会出现多少次9呢?应该怎么办?
我们来优化一下算法:
1)可以设置一个输入函数scanf,那么我们想求哪个区间的话都可以
2)很大的数我们要是一位一位判断的话一定会非常的麻烦,总不至于判断几十行吧,所以我们可以设置一个循环,使得程序变的简单,每次%10 之后再给他除以10,循环进来再%10就可以得到下一位.
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main()
{
//通过程序计算出1~100的所有证书中出现多少次9;
int left = 0, right = 0; //所求区间左右值;
int i = 0;
int temp;
int count = 0; //用来计数
printf("请输入所求区间:");
scanf("%d %d", &left, &right);
for (i = left; i <= right; ++i)
{
temp = i; //创建一个临时变量来存储i的值;
while (temp > 0)
{
if (temp % 10 == 9)
{
count++;
}
temp = temp / 10;
}
}
printf("出现的9的次数为:%d\n", count);
system("pause");
return 0;
}
这样的话我们就可以求任意两个数之间出现9的次数了.
今天就分享这么多,谢谢观看^_^