當前位置:首頁 » 操作系統 » 演算法輸入格式

演算法輸入格式

發布時間: 2023-05-15 22:38:19

① 寫演算法有什麼格式嗎(數據結構學習中。。。)

演算法描述當然沒有固定格式,自然語言描述的甚至是最容易理解的。
你看到的90%是偽代碼,偽代碼的好處在於不受編程語言本身的限制,更具通用性。學會看懂偽代碼表示的演算法是基本功。比如《演算法導論》裡面的。

② 高分(100)求解演算法(加油問題),回答對了追加100

// oil.c :greedy strategy.
//吵渣鉛

#include <stdio.h>
#include <stdlib.h>
#define N 20 // the maximum number of oil station
#define Max 300 //the maximum price of oil, never equal or higher than it

int c; /升好/capacity of tank
int e; //number of liters per 100 kilometers
int dist[N];
int price[N];
int dest;
int sum;
int num; // the number of oil stations

int check(int num);
int get_data();
int run(int num);

int get_data()
{
FILE *fp;
int i;
fp=fopen("C:\\input2.txt","r");
if(fp == NULL)
{
printf("No input file!\n");
return 0;
}
fscanf( fp, "%d\n", &c);
fscanf( fp, "%d\n", &e);
i = 0;
while(fscanf(fp, "%d %d\n", &dist[i],&price[i])!= NULL)
{
if ((dist[i]||price[i])==0) break;
i++;
}

fclose(fp);
return i-1;
}
/*
Mothod:
*/

int check(int num)
{
int i;
for(i=0; i<num; i++)
{
if((dist[i]+c*100/e)<dist[i+1]) // whether the oil station can be reached or not
return 0;
}
return 1;
}

int run(int num)
{
int i,j,d,k,low_price,tmp;
d = dist[0];
k = 0;
sum = c*price[0];
dest = dist[num];

while( (d + c*100/e)<= dest)
{
tmp = 0;
j = k+1;
low_price = Max; //max price
for(i = k+1; i < num; i++)
{
if ((dist[i] - d)< (c*100/e)/2) // rule 1
{
tmp++;
continue;
}
if ((dist[i] - d)> c*100/梁譽e) break;
if (price[i] <low_price) //choose the cheapest
{
low_price = price[i];
j = i;
}

}
if(low_price == Max) j = k + tmp; //rule 1 but cannot get to the next station

sum += (dist[j]-d)*price[j]*e/100;
d = dist[j];
k = j;
}

return sum;
}

int main()
{
num = get_data();
if(check(num) == 0)
{
printf("No Solution!\n");
return 1;
}
sum = run(num);
printf("The minimum cost is %d.\n", sum);
return 1;
}

③ 一個演算法的部分不知道該怎麼實現求教!

我搜迅戚覺得這里用不到並查集。演算法其實只要一直維護一個當前最優解就行了,因為任何一個新輸昌洞入的作業,無非是在最優解中添加一個作業,或者替換一個作業,使最優解保持為最優就行了。在這個問題里,新輸入的作業不可能使最優解變壞,所以保持局部最優,最後輸入完成之後也能得到世陵整體最優。
比如按照sample input來看,我們給作業編號:
1 6 -------1號
1 7 -------2號
3 2 -------3號
3 1 -------4號
2 4 -------5號
2 5 -------6號
6 1 -------7號
那麼,最優解的集合是這樣變化的:{1}->{2}->{2,3}->{2,3}->{2,3,5}->{2,3,6}->{2,3,6,7},於是得到最優的學分數7+2+5+1=15
希望樓主能理解我的意思,我們可以繼續探討。

④ 求解一貪心演算法問題

最快回答那個不懂別亂說,別誤人子弟。
這題標準的貪心演算法,甚至很多時候被當做貪心例題
要求平均等待時間,那麼就得用 總等待時彎盯間 / 人數
所以只用關心總等待時間,
如果數據大的在前面,那麼後蘆鬧碧面必然都要加一次這個陪舉時間,所以按從小到大排。
給你寫了個,自己看吧。
#include "stdafx.h"
#include <iostream>
#include <algorithm>
#include <stdio.h>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
int n;
float arr[105];
cin >> n;
for(int i = 0; i < n; ++i)
cin >> arr[i];
sort(arr, arr+n);
int tnow = 0;
int tmax = 0;
for(int i = 0; i < n; ++i)
{
tmax += tnow;
tnow += arr[i];
}
for(int i = 0; i < n; ++i)
{
printf("%0.2f ", arr[i]);
}
cout << endl;
printf("%0.2f\n",tmax / (float)n);
return 0;
}

⑤ 演算法訓練 石子游戲 python

演算法訓練 石子 游戲

問題描述

石子 游戲 的規則如下:

地上有n堆石子,每次操作可選取兩堆石子(石子個數分別為x和y)並將它們合並,操作的得分記為(x+1) (y+1),對地上的石子堆進行操作直到只剩下一堆石子時停止 游戲 。

請問在整個 游戲 過程中操作的總得分的最大值是多少?

輸入格式

輸入數據的第一行為整數n,表示地上的石子堆數;第二行至第n+1行是每堆石子的個數。

輸出格式

程序輸出一行,為 游戲 總得分的最大值。

樣例輸入

10

5105

19400

27309

19892

27814

25129

19272

12517

25419

4053

樣例輸出

15212676150

數據規模和約定

1 n 1000,1 一堆中石子數 50000

思路:

運用貪心演算法思想,每次都取石子數量最多和第二多的兩堆石子進行合並操作(進行排序操作後取前兩個數),即可得到每次操作的得分為最大,最後再將每次的操作得分最大值相加求和即可得到整個 游戲 過程中操作的總得分的最大值。

代碼:

歡迎大家採納和指正!

更多內容請持續關注該賬號或CSDN的 RuthlessL!

⑥ 演算法輸入輸出格式是什麼

給你舉兩個例子吧
例1(多個輸入,a,b是輸入的初始條件)
int fun1(int a, int b )
{
int c;
c = a + b;

return c;
}

例2(0個輸入,a,b本身自帶初始條件)
int fun1( )
{
int a=1, b=2, c;
c = a + b;

return c;
}

⑦ 用Des演算法輸入十六進制的分組數據把輸入的字元轉換成二進制數

由於每個16進數轉顫吵指化為了二進制佔4位,如16進制中的D轉換為二進制位1101,16進制中的12轉換為二進茄配製碰唯為00010010,佔8位.在DES中,明文輸入為64位,本程序以8位為一單位,循環輸入8次,因此單次輸入格式為兩個16進制數,如DE;以空格間隔輸入的次數

⑧ 設計演算法判斷一個無向圖G是否為樹。

首先題目中有一中吵處應該是錯了。

第2到n+1行,應該改為,第2到m+1行


方法:DFS搜索圖,圖中的邊只可能是樹邊或反向邊,一旦發現反向邊,則表明存在環。該演算法的復雜度為O(V)。


代碼:

/*
設計演算法判斷一個無向圖G是否為樹。若是,輸出「Yes!」;否則輸出「No!」。
輸入格式:
第1行是空格分隔的兩個整數n和m,分別表示無向圖的頂點數和邊數,n<=10000,m<=100000。
第2到m+1行,每行兩個整數a和b,表示頂點a和b之間有一條邊,1<=a,b<=n。
鍵盤輸入,不必檢查輸者亂入錯誤,輸入確保正確。
輸出格式:
屏幕上顯示一行,「yes!」或「no!」.行末有回車。

樣例1

樣例賣嫌侍2

輸入:
43
12
23
31
輸出:
No!

輸入:
21
12

輸出:
Yes!
*/

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

constintN=10000,M=100000;
booledge[N][N];//數組記錄兩點是否存在邊
boolvisit[N];//標記該節點是否訪問

boolDFS_check(intx,inty=-1)
{
if(visit[x])
returnfalse;

visit[x]=true;
inti;
for(i=0;i<N;i++)
if(edge[x][i]&&i!=y)
if(visit[i])
returnfalse;
else
if(!DFS_check(i,x))
returnfalse;

returntrue;
}

intmain()
{
intn,m;
scanf("%d%d",&n,&m);

memset(edge,false,sizeof(edge));
inti,x,y;
for(i=0;i<m;i++)
{
scanf("%d%d",&x,&y);
edge[x-1][y-1]=true;
edge[y-1][x-1]=true;
}

memset(visit,false,sizeof(visit));
boolresult=DFS_check(0);
if(result)
for(i=0;i<n;i++)
if(!visit[i])
result=false;
if(result)
printf("Yes! ");
else
printf("No! ");

system("pause");
return0;
}

⑨ 輸入1個無符號二進制數串,編寫程序將其轉換成對應的十進制數,並輸出。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>

#defineARR_LEN256

/*任意進制數轉十進制數*/
/*演算法原理:*/
/*10進制轉換結果,為各位位碼值乘以位權值之和*/
/*位:從0開始,由低位依次向高位*/
/*位碼值:各位的10進制值*/
/*位權值:進制的位次方*/
/*R進制數共n位,從低位至高位,第n位表示為Xn,對應10進制數D*/
/*D=X0*R^0+X1*R^1+……+X(n-1)*R^(n-1)+Xn*R^n*/
/*參數說明:*/
/*char*value:其他進制數,以字元串形式存儲*/
/*int*result:轉換後的十進制數*/
/*intradix:待轉換的進制*/
intothers2Decimal(char*value,int*result,intradix){
char*p=value+strlen(value)-1;/*位指針,初態逗納始定位於最低位*/;
int帆沒weight=1;/*位權值,初始為進制的0次方,即為1*/
intdigit;/*位碼值*/

*result=0;
do{
/*取位值,兼容10以上進制的大小寫字母*/
if(*p>='0'&&*p<='9'&&*p<(radix+'0'))
digit=*p-'0';
elseif(*p>='a'&&*p<='z')
digit=*p-'a'+10;
elseif(*p>='A'&&*p<='Z')
digit=*p-'A'+10;
else
return0;/*位值錯誤,返回非正常運行導致退出函數*/

*result+=digit*weight;/*位碼值乘以位權值之累加*/

/*向高位移動一位並修正位權值*/
p--;
weight*=radix;/*位權值累乘進制,即對應位之進制的位次方*/
}while(p>=value);

return1;
}

intmain(void){
charvalue[ARR_LEN];
intradix=2;
intresult;

printf("請輸入%d進制數:",radix);
fflush(stdin);/*清除輸入緩沖區*/
gets(value);

putchar(' ');
puts("================================================================ ");

if(!others2Decimal(value,&result,radix))
printf("%d進制數%s錯誤! ",radix,value);
else{
printf("%d進制 %s ",radix,value);
printf("10進制 %ld "指此,result);
}
putchar(' ');

getch();/*屏幕暫留*/
return0;
}

如有問題,點擊頭像聯系我

⑩ 常用的演算法表示形式有哪些

演算法的常用表示方法有三種:

1、使用自然語言描述演算法;

2、使用流程圖描述演算法;

3、使用偽代碼描述演算法。

演算法是指對解決方案的准確、完整的描述,是解決問題的一系列清晰的指令。該演算法代表了描述解決問題的策略和機制的系統方式。也就是說,對於某個標准輸入,可以在有限的時間內獲得所需的輸出。

如果一個演算法有缺陷或不適合某個問題,執行該演算法將無法解決該問題。不同的演算法可能使用不同的時間、空間或效率來完成相同的任務。一個演算法的優劣可以用空間復雜度和時間復雜度來衡量。

熱點內容
台電安卓平板系統太低怎麼辦 發布:2025-05-15 05:20:00 瀏覽:507
安裝了zlib編譯報錯 發布:2025-05-15 05:19:56 瀏覽:166
二分演算法無序 發布:2025-05-15 05:18:22 瀏覽:28
網易我的世界伺服器組件怎麼安裝 發布:2025-05-15 05:16:58 瀏覽:311
如何復制密碼狗 發布:2025-05-15 05:15:28 瀏覽:737
c語言報告三 發布:2025-05-15 05:10:37 瀏覽:844
09壓縮餅干 發布:2025-05-15 05:05:58 瀏覽:279
迭代法編程c 發布:2025-05-15 04:58:01 瀏覽:815
用什麼dns伺服器地址快 發布:2025-05-15 04:52:59 瀏覽:27
手機端so反編譯 發布:2025-05-15 04:50:55 瀏覽:610