當前位置:首頁 » 編程語言 » 杭電oj2309c語言解析
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

杭電oj2309c語言解析

發布時間: 2022-03-14 00:03:59

⑴ 杭電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秒
*/
}