ACM学习方式
n 练习->总结->练习->总结->……
n 杭电ACM论坛
n google、baidu
一、航电ACM no1096调试记录
1.#include<stdio.h>
main()
{
int t,n,sum,a;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
while(n--){
scanf("%d",&a);
sum+=a;
}
printf("%d/n/n",sum);}}
Sample Input
3
4 1 2 3 4
5 1 2 3 4 5
3 1 2 3
Sample Output
10
15
6
#include<stdio.h>
main()
{
scanf("%d",&t);
while(t--){
scanf("%d",&n);
while(n--){
scanf("%d",&a);
sum+=a;
}
printf("%d/n/n",sum);}}
Sample Input
3
4 1 2 3 4
5 1 2 3 4 5
3 1 2 3
Sample Output
10
25
31
以上程序要说明的问题同课本《c语言程序设计》第68页下程序段类似。
printf("%d/n/n",sum);followed by a blank line.
printf("/n%d/n",sum);每两个答案间空一行a blank line between outputs.
二.#include<stdio.h>
void main()
{
int i,j;
double item,sum;
sum=0;
for(i=0;i<=100;i++){
item=1;
for(j=1;j<=i;j++)
item*=j;
sum+=item;
}
printf("1!+2!+3!+4!+5!……+100!=%e/n",sum);
}
合并循环,可否???当然不可以!
运行结果:
1!+2!+3!+4!+5!……+100!=9.426900e+157
请按任意键继续. . .
三.为何不以0未结束标志???No1006集训一(题目如下:)
#include<stdio.h>
int main(void)
{
int sum,a,m;
do{
scanf("%d",&m);
sum=0;
while(m--){
scanf("%d",&a);
sum+=a;
}
printf("%d/n",sum);
return 0;
}
四.比较以下两个程序中“sum=0”的异同:
/*#include<stdio.h>
int main()
{
scanf("%d",&n);
while(n--){
scanf("%d",&m);
while(m--){
scanf("%d",&a);
sum+=a;
}
printf("%d/n",sum);
}
return 0;
}*/
#include<stdio.h>
main()
{
int a,b,n,sum;
scanf("%d",&n);
while(n--){
scanf("%d",&a);
while(a--){
scanf("%d",&b);
sum+=b;
}
printf("%d/n",sum);
}
}
五.#include<stdio.h>
int main()
{
int n,a,m,sum;
sum=0;
scanf("%d",&n);
while(n--){
sum+=a;
}
printf("%d/n",sum);
}
return 0;
}
#include<stdio.h>
main()
{
int b,n,sum;
while((scanf("%d",&n))!=EOF)[y8]
{
sum=0;
while(n--){
scanf("%d",&b);
sum+=b;
}
printf("%d/n",sum);
}
}
六.Problem Description
Your task is to calculate the sum of some integers.
Input
Input contains an integer N in the first line, and then N lines follow. Each line starts with a integer M, and then M integers follow in the same line.
Output
For each group of input integers you should output their sum in one line, and you must note that there is a blank line between outputs.
Sample Input
3
4 1 2 3 4
5 1 2 3 4 5
3 1 2 3
Sample Output
10
15
6
#include<stdio.h>
main()
{
int a,b,n,sum;
scanf("%d",&n);
while(n--){
sum=0;
scanf("%d",&a);
while(a--){
scanf("%d",&b);
sum+=b;
}
printf("%d/n/n",sum);
else printf("%d/n",sum);
[微软用户9] }
}
六格式控制说明与参数:
double f(int money,int year,double rate);
main()
{
int money,year;
double sum,rate;
scanf("%d%d%l[微软用户10] f",&money,&year,&rate);
sum=f(money,year,rate);
printf("sum=%.2f/n",sum);
}
double f(int money,int year,double rate)
{
double result;
result=money*pow((1+rate),year);
return result;
}
七数组范围(长度)问题:
#include<stdio.h>
int main()
{
scanf("%d",&n);
while(n--){
a[2]=1;
a[3]=2;
scanf("%d",&m);
for(i=2;i<=m;i++){
a[i+2]=a[i+1]+a[i];
}
printf("%d/n",a[m]);
}
return 0;
}
八经验之谈:
error C2601: 'f' : local function definitions are illegal
fatal error C1004: unexpected end of file found
的同时显示,可能表明while等语句右“}”没匹配。
2void f(int k){
for(int a[北方民族大学12] =1;a<66;a++){
if((18+a*k)%65==0){
printf("%d/n",a);
return;
}
}
printf("no/n");
}
九hdu1098(数学归纳)
又是一个以前不敢做的题(或者说找不到思路).
今天在网上看了一下别人的思路,证明该题果然还是利用数学归纳思想求解.
题意浅析:对给定非负整数k , 求最小非负整数a,使得对任意x,都有f(x)被65整除.其中:
f(x)=5*x^13+13*x^5+k*a*x
先找个思路吧,由于是最小非负整数,则a显然应该从1开始取的,f(1)的值还是容易得到的.
要对任意x,都有65|f(x),即是说若 65|f(x) ,则 65|f(x+1). PS:找到数学归纳的感觉了.解:
对给定k,若已知 65 | f(1),
设65 | f(x),
则
f(x+1) = 13 * (x+1)^5 + 5 * (x+1)^13 + a*k*(x+1)
= 13 * [C(0,5) * x^ 5 + ... + C(5,5)] + 5 * [ C(0,13) * x^13 + .. + C(13,13) ] + a*k*x + a*k
= 13*x^5 + 13 + 5*x^13 + 5 + a*k*x + a*k
= 18 + a*k (mod 65)
由于65 | f(1) , 所以对任意k,只要a的取值使 65 | f(1),即可导出 65 | f(x) , 即 65 | (18 + a*k).
而从a=1递增,应用抽屉原则,a<66时必有一值使 65 | ( 18 + a*k) , 否则无解.
代码就很简单了:(参见hud1098)
十如何从一开始就避免错误?
有这样一句谚语——“防患于未然”,它的意思是避免问题的出现比出现问题后再想办法弥补要好得多。这在计算机编程中也是千真万确的!在编写程序时,一个经验丰富的程序员所花的时间和精力要比一个缺乏经验的程序员多得,但正是这种耐心和严谨的编程风格使经验丰富的程序员往往只需花很少的时间来调试程序,而且,如果此后程序要解决某个问题或做某种改动,他便能很快地修正错误并加入相应的代码。相反,对于一个粗制滥造的程序,即使它总的来说还算正确,那么改动它或者修正其中一个很快就暴露出来的错误,都会是一场恶梦。
[GP3]此处m==0就是结束标志
[微软用户9]不要可否???思考!
[微软用户10]存在与否直接导致最终结果对与错 2009-7-15
[微软用户11]题目告诉m的范围1<=m<=40,当我定义a[40]提交后报错。此时能AC!——数组范围(长度)问题2009-7-16
[北方民族大学12]这就表示该程序是c++写的,提交时应用c++,而不是c,否则系统会报语法错误(vc++6.0编译器不会报错)