⑴ 杭电OJ基本格式和c语言相比有什么需要注意的
红旗在哪里?
⑵ c语言题目为何答案错误(杭电oj1091)
#include<stdio.h>
voidmain()
{
inta,b;
while(scanf("%d%d",&a,&b)!=EOF)
{
if(a==0&&b==0)
break;
printf("%d ",a+b);
}
}
0 0的数据可能在中间,只是不处理
并不是以0 0结束
⑶ c语言解析
int a[20]={1,1},i; 是定义一个长度为20的整型数组a,并初始化数组前两项为1,1,还定义了一个整形变量i
for(i=2;i<20;i++) a[i]=a[i–1]+a[i–2]; 是用for循环,让数组里每一项都等于前两项之和。
for(i=0;i<20;i++) printf(i%5==4)printf("\n");是用for循环,输出整个数组
⑷ 杭电acm2544题 c语言解法而非c++
#include<stdio.h>
#include<string.h>
#include<stdbool.h>
intn,m;
boolcheck[101];
intd[101];
intv[101][101];
intmain()
{
while(1)
{
scanf("%d%d",&n,&m);
if(!n&&!m)break;
memset(check,0,sizeof(check));
memset(d,0x3f,sizeof(d));
memset(v,0,sizeof(v));
inti,cnt;
for(i=1;i<=m;i++)
{
inta,b,c;
scanf("%d%d%d",&a,&b,&c);
v[a][b]=v[b][a]=c;
}
d[1]=0;
for(cnt=1;cnt<=n;cnt++)
{
intnum,dis=2e9;
for(i=1;i<=n;i++)
if(!check[i]&&dis>d[i])
{
num=i;
dis=d[i];
}
check[num]=1;
for(i=1;i<=n;i++)
if(v[num][i]&&d[i]>d[num]+v[num][i])
d[i]=d[num]+v[num][i];
}
printf("%d ",d[n]);
}
return0;
}
无优化,O(n^2)的时间复杂度,GCC提交AC,仅供参考
⑸ C语言代码解析
你应该还没学指针吧,学了之后这个代码就很好懂了。我先简单说说,你可以把a[100]这个数组看成一个个抽屉,每个抽屉依次有自己的编号。子函数中a+n-1就是a[n-1]的编号值,a即为a[0]的编号,通过编号值找到a[n-1]这个排在最后的抽屉,把它抽出来,然后它之前的抽屉依次后移一格,它再放到第一个,随着抽屉排序的变化,抽屉里存的数的顺序也发生变化。通过m计数,将上述过程重复m次完成。
⑹ C语言 杭电OJ 1092. 两个大体相同,只有 sum=0 的位置不同。第一个判对,第二个判错,而且编译时候没错。
主要是看你题目要求是什么。如果题目要求sum只是记录每次while((scanf("%d",&n)!=EOF)&&(n!=0))的结果,那就是选择第一个;如果是要记录整个while((scanf("%d",&n)!=EOF)&&(n!=0))运行结束后的结果,那么就是选择第二个。
第一个:
while((scanf("%d",&n)!=EOF)&&(n!=0))
{
sum=0;// 这里sum清0,表示只计算while(n--)的结果,当下次while((scanf("%d",&n)!=EOF)&&(n!=0))的时候,就清掉了。
while(n--)
第二个:
int sum=0;// 这里定义的话,在下面2个while中sum的值都不会被清0,即进行累加。
while((scanf("%d",&n)!=EOF)&&(n!=0))
{
while(n--)
⑺ C语言为何杭电oj总是wrong answer
for(i2=1;i2<=z;i2++)
{
if(cc[i2]>='A'&&cc[i2]<='Z')
h2=1;
}
if(h2==1)
u=u+1;
for(i2=1;i2<=z;i2++)
{
if(cc[i2]>='0'&&cc[i2]<='9')
h2=1;
}
不可能同时成立
⑻ 请教杭电OJ的题,C语言,题目如题,代码如下,杭电OJ上一直提示时间超时T^T,请问怎么改
我觉得你把题目意思理解错了,每一行的第一个数据是代表求和的数据的个数为N,后面的数据个数为N,所以:
while(scanf("%d",&num[i])&&(num[i]!=a)){
i++;}
应该变为:
while((i<=a)&&scanf("%d",&num[i])){
i++;}
并且,
for(j=0;j<i;j++){
sum=sum+num[j];
}
j的起始值应该从1开始
⑼ c语言编程题,希望有详细解析
#include <stdio.h>
main ()
{ int x,i,a[11]= {1,5,6,7,13,22,27,37,38,45};
scanf("%d",&x);
for (i=9; i>-1&&a[i]>x; i--)//i不越界,且a[i]>x时把a[i]后移一位
a[i+1]=a[i];
a[i+1]=x;//把x放到正确的位置
for(i=0; i<11; i++)
printf ("%d ", a[i]);
return 0;
}
⑽ C语言程序解析
楼主给的东西不是很完整啊,看看是不是你要的结果。
void
Init()
{
int
gd=DETECT,gm;
/*
定义变量,gd有了初值
*/
initgraph(&gd,&gm,"d:\\tc");
/*
初始化图形设备,准备画图的工作
*/
cleardevice();
/*
清理设备(缓存啊,屏幕之类)
*/
setcolor(YELLOW);
/*
设置颜色为黄色
*/
outtextxy(250,10,"anykey
to
continue");
/*
在输出设备上的250,10处写上“anykey
to
continue”字符(字体颜色就是上句设置的黄色)
*/
setcolor(RED);
/*
设置颜色为红色
*/
outtextxy(20,300,"preorder");
/*
在(20,300)处写上“preorder”字符(红色)
*/
outtextxy(20,350,"midorder");
/*
在(20,350)处写上“midorder”字符(红色)
*/
outtextxy(20,400,"posorder");
/*
在(20,400)处写上“midorder”字符(红色)
*/
getch();
/*用来接收标准输入设备输入的一个字符或按键
*/
}
/*遍历时显示每个结点的过程*/
void
DrawNode(Tree
*t,int
color)
{
setcolor(YELLOW);
/*
设置颜色为黄色
*/
setfillstyle(SOLID_FILL,YELLOW);
/*
设置填充的类型和颜色
*/
fillellipse(t->x,t->y,10,10);
/*
在(t->x,t->y),处画一个10,10的椭圆
*/
setcolor(RED);
/*
设置颜色为红色
*/
sprintf(str,"%c",t->data);/*将内容转换成字符串输出*/
/*将t->data里的数据存到了str中*/
outtextxy(t->x-3,t->y-2,str);
/*
在(t->x-3,t->y-2)处写str里的字符(红色)
*/
setcolor(color);
/*
设置颜色为给定的颜色color
*/
outtextxy(s.x,s.y,str);
/*
在(s.x,s.y)处写str里的字符(color)
*/
setcolor(RED);
/*
设置颜色为红色
*/
sprintf(str,"%d",s.num);/*将遍历次序用数字显示在树的结点上*/
outtextxy(t->x-3,t->y-20,str);
/*
在(t->x-3,t->y-2)处写str里的字符(红色)
*/
s.num++;
/*
遍历到下个节点
*/
sleep(1);
/*
延迟1秒
*/
}