本文目录一览:
- 1、一个简单的C语言题目……求大佬解答
- 2、C语言经典题目
- 3、C语言小题目!
- 4、C语言的小题目
一个简单的C语言题目……求大佬解答
(1)第1行的功能是什么?
求输入10进制整数的位数。
(2)在第2行中,main函数前面为什么有void?
表示该main函数无返回值。
(3)第4行的功能。
定义两个整型变量。
(4)设输入整数356,写出执行该程序的运行结果。
3
C语言经典题目
1.正确的算法:
如果n=3, 过河时间为A+B+C
如果n=2, 好算, 不费口舌了
如果n=4, 这个是重点:
每次优先考虑把最慢两人送过河
把n人中最快两人记为A,B, 最慢两人记为C,D(过河时间ABCD), n人问题实质上转换为4人过河问题, 参考到4人过河时的优化,
记AB过河, A回, CD过河, B回, 为方法X, 实质是利用最快两人进行优化, 耗时A+2B+D
记AD过河, A回, AC过河, A回, 为方法y, 实质是利用最快一人来过河, 耗时2A+C+D
每次比较这两个方法, 如果x快, 使用x方法, 如果y快, 则用y, 并且, 一旦某次使用y方法后, 以后都不用比较了, 全部使用y方法过河
2.算法正确性证明:
为什么每次先让最慢两人过河? 因为他们迟早要过河...早过晚过一样, 而晚过的话, 有可能时间不能被优化, 所以选择最先过
为什么是两人, 不是三人? 因为这船一次只能两人, 三人问题和两人问题的优化一样, 所以一次考虑三人毫无意义, 同理, 三人以上不加考虑
为什么某次用y过河后不用再比较xy了?
先看这个例子:
1 99 100 101
用x方法是99+1+101+99= 300
y方法是 101+1+100+1 = 203
y比x快的原因是2A+C+D A+2B+D, 即 A+C2B
容易想到, 从此以后A+C都会小于2B了(因为C越来越小)
3.补充:
算法分析就到这里了, 至于具体的程序...楼主既然是ACMer, 这个应该不困难
当然, 如果楼主需要的话, 也可以给出程序
C语言小题目!
1,
main()
{char str[13];scanf("%s",str);printf("%s\n",str);}
若输入abcd1234 efgh回车则程序输入结果是abcd1234 为什么?
scanf("%s",str); 遇到空格, 读取截止.所以只读取abcd1234
2,
c[N]中的各项值是1CR2CR34
使用getchar()时会读取回车符的.
如果将for(;iN;c[i]=getchar();i++); 改为
for(;iN;scanf("%c", c[i]),i++); 的话就能输出12345
C语言的小题目
这个程序很简单,用递归是把问题复杂化了,不过实现的方法有很多种,只要能实现就行。以下是我的一种方法,已经过编译调试,可运行
算法核心如下:
while
(
i
loop
)
{
sum
+=
a
*
pow(
10
,
i
)
+
temp;
temp
+=
a
*
pow(
10
,
i
);
i
++;
}
我想你应该能看懂,就不具体解释了哈
程序源代码如下:
#include
"stdio.h"
#include
"math.h"
int
main()
{
int
a;
/*进行计算的数*/
int
loop;
/*循环次数*/
int
i
=
0;
/*循环起始值*/
double
temp
=
0;
/*过程变量,存储上一次的值*/
double
sum
=
0;
/*总和*/
printf(
"Please
input
two
numbers
form
as:
numerA
numberLOOP\n"
);
scanf(
"%d
%d",
a
,
loop
);
while
(
i
loop
)
{
sum
+=
a
*
pow(
10
,
i
)
+
temp;
temp
+=
a
*
pow(
10
,
i
);
i
++;
}
printf(
"\nResult
is:
%.0f\n"
,
sum
);
return
0;
}