演算法編程題
按你要求空瓶倒
#include<stdio.h>
intmain()
{
intnum[3],numSave,i,j;
printf("請輸入3個數:");
scanf("%d%d%d",&num[0],&num[1],&num[2]);
for(i=0;i<3;i++)
{
for(j=i+1;j<3;j++)
{
if(num[i]>num[j])
{
numSave=num[i];
num[i]=num[j];
num[j]=numSave;
}
}
}
printf("從小到大排列:%d%d%d",num[0],num[1],num[2]);
return0;
}
❷ 數據結構演算法編程題,刪除帶頭結點的單鏈表中最大元素或最小元素
//刪除單鏈表中最大元素
Del-max(link a){
int tmp;
element *p;
element *max;
p=a; //指針,用於遍歷鏈表,取數與當前最大結點值比較
max=a; //指針,用於記錄最大元素所在位置(未考慮有多個最大元素)
tmp=p->data; //變數,用於記錄當前最大結點值
while(a->next!=null){
p=p->next;
if(p->data>tmp){ 、//如果當前指針所指結點值大於當前tmp所保留的值,則記錄
max=p; //當前位置(放入到max),記錄當前最大值(放入tmp)
tmp=p->data;
} //end of if
} //end of while
tmp=max->next->data; //一次遍歷後max指針所指結點就是最大元素,刪除之。。。
max->data=tmp;
max->next=max->next->next; //刪除方法能看懂么?好好思考。。。
}//end of Del-max
❸ 演算法編程題:數字組合求和問題 輸入兩個正整數n和m,從數列1,2,3.......n 中隨意取幾個數,使其和等
沒看懂
去問問你的計算機老師吧
❹ 兩道簡單的C語言編程題 1.設給定三個整數a.b.c,試寫出尋找其中數的一個演算法,並分析在平均情況
先回答第一個問題:
#include<stdio.h>
#include<conio.h>
intmain(){
inta,b,c,d;
printf("Inputa,b,c:");
scanf("%d,%d,%d",&a,&b,&c);
if(a>=b){
if(b>=c)d=b;//a>=b>=c,比較2次
elseif(a>=c)d=c;//a>=c>b,比較3次
elsed=a;//c>a>=b,比較3次
}else{
if(a>=c)d=a;//b>a>=c,比較2次
elseif(b>=c)d=c;//b>=c>a,比較3次
elsed=b;//c>b>a,比較3次
}//平均比較次數:(2+3+3+2+3+3)/6=8/3次,最壞比較次數:3次
printf("ZhongShu=%d Finished! ",d);
getch();
return0;
}
平均比較8/3次,最壞比較3次。第二個問題:
#include<stdio.h>
#include<conio.h>
intBinMax(inta[],intlow,inthigh){//二分查找最大值,low、high為查找范圍下標
if(low>high){
printf(" BinMaxError! ");
return-32768;//范圍出錯,提示,並返回整型最小值
}
if(low==high)returna[low];
if(low==high-1)return(a[low]>a[high]?a[low]:a[high]);
intmid=(low+high)/2,m1,m2;
m1=BinMax(a,low,mid);//找前半部的最大值
m2=BinMax(a,mid+1,high);//找後半部的最大值
return(m1>m2?m1:m2);
}
intmain(){
inta[9]={3,6,2,5,9,1,8,7,10},max;//元素個數不一定要滿足n=2^k
max=BinMax(a,0,8);
printf("max=%d Finished! ",max);
getch();
return0;
}
都能看懂吧?希望能幫到你!
❺ 編程題 設計演算法編寫程序,輸入整數,判定該數能否同時被6、9和14整除
#include<iostream>
using namespace std;
int main(){
int n;
cout<<"請輸入一個整數"<<endl;
cin>>n;
if(n%6==0&&n%9==0&&n%14==0){
cout<<"這個數能同時被6、9和14整除"<<endl;
}else{
cout<<"這個數不符合"<<endl;
}
return 0;
}
❻ 數據結構與演算法設計編程題(用C++描述),急,求大神解答~~~
以待排序序列 { 2, 5, 3, 4, 1} 為例,按非遞減有序排列。
第一趟起泡排序過程如下:
初始:25341
第1次:25341
第2次:235413比最終位置前移了一個位置
第3次:234514比最終位置前移了一個位置
第4次:23415
通過第一趟的排序過程發現,3、4原來在索引為2、3的位置,但經過第一趟排序過程後,3、4暫時移動到了索引為1、2的位置。
C++程序如下:
#include"iostream"
#include"iomanip"
usingnamespacestd;
//輸出數組中的所有元素
voiddisplay(intarr[],intn)
{
inti;
for(i=0;i<n;i++)
{
cout<<setw(4)<<arr[i];
}
cout<<endl;
}
//起泡排序
voidbubbleSort(intarr[],intn)
{
inti,j;
inttemp;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(arr[j]>arr[j+1])
{
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
cout<<"第"<<i+1<<"趟:"<<endl;
display(arr,n);
}
}
intmain()
{
intarr[]={2,5,3,4,1};
intn=5;
cout<<"初始狀態:"<<endl;
display(arr,n);
bubbleSort(arr,n);
return0;
}
運行測試:
初始狀態:
25341
第1趟:
23415
第2趟:
23145
第3趟:
21345
第4趟:
12345
❼ 一道編程題 求演算法思路.
因為n比較小,此題最優的解法是雙向搜索
做法如下(n=20):
枚舉前十個數的放入集合的放法,共3^10種,以兩個集合的元素差為key,兩個集合的元素和為value,存入哈希表
枚舉後十個數的放入集合的放法,以兩個集合的元素差為key,查哈希表,這樣能查到對應的前十個數的分配方法,就知道總和了
這是最優解法,復雜度為3^(n/2)
這題還有一種經典的動態規劃的解法,叫「雙塔問題」,復雜度為w*n,w為所有數的總和