c语言问题购物的路程

Python015

c语言问题购物的路程,第1张

他们所走的路就是最大值减去最小值乘以2

#include<stdio.h>

int main() 

{  

 int i, n, m, min, max

 

 while (scanf("%d", &n) && n)

 {

  scanf("%d", &m)

  min = max = m

  for (i = 1 i < n i++)

  {

   scanf("%d", &m)

   if (min > m)

    min = m

   else if (max < m)

    max = m

  }

  printf("%d\n", (max - min) * 2)

 }

 

 return 0 

}

#include <stdio.h>

#include <malloc.h>

#include<stdlib.h>

#define MAX 100

#define MAXNUM 10000000

int previous[MAX-1]// 求路径需要

int pp[MAX-1]// 记录最短路径

typedef struct graphnode

{

int vexnum//顶点

int arcnum//弧

int gra[MAX][MAX]//邻接矩阵表示0或1

}Graph

int dist[MAX]// 最短距离

int arc[MAX][MAX]// 权

int main()

{

void Dijkstra(Graph *g,int v)

int i,j,n,m

int v //源点

Graph *G

G=(Graph *)malloc(sizeof(Graph))

printf("vexnum:\n")

scanf("%d",&G->vexnum)

printf("arcnum:\n")

scanf("%d",&G->arcnum)

printf("graph:\n")

for(i=0i<G->vexnumi++)

for(j=0j<G->vexnumj++)

{

scanf("%d",&G->gra[i][j])

}

for(i=0i<G->vexnumi++)

for(j=0j<G->vexnumj++)

{

if(G->gra[i][j]==1)

{

printf("请输入%d到%d的权值:",i,j)

scanf("%d",&arc[i][j])//若有弧 则输入i到j直接的权

}

else

arc[i][j]=MAXNUM

}

printf("请输入源点v的值:")

scanf("%d",&v)

Dijkstra(G,v)

printf("请输入源点所要到达的点:\n")

scanf("%d",&n)

pp[0]=0

i=1

m=n// 记录n的值

while(n!=0)// 求0到其他点路径

{

pp[i]=previous[n]

i++

n=previous[n]

}

printf("Path:0 ->")

for(j=G->vexnum-1j>=0j--)

if(pp[j]!=0)

printf(" %d ->",pp[j])

printf("%d\n",m)

return 0

}

void Dijkstra(Graph *G,int v)

{

int previous[MAX-1]

int newdist

bool sign[MAX]

if(v<0||v>MAX-1)

{

printf("该源点不存在!\n")

return

}

for(int i=0i<G->vexnumi++)//初始化

{

dist[i]=arc[v][i]

sign[i]=false

if(dist[i]==MAXNUM)

previous[i]=0

else

previous[i]=v

}

dist[v]=0

sign[v]=true

for(i=0i<G->vexnumi++) // i<n-1待定

{

float temp=MAXNUM

int u=v//u 中间变量

for(int j=0j<G->vexnumj++)

if((!sign[j])&&(dist[j]<temp))

{

u=j

temp=dist[j]

}

sign[u]=true

for(j=0j<G->vexnumj++)

if((!sign[j])&&(arc[u][j]<MAXNUM))

{

newdist=dist[u]+arc[u][j]

if(newdist<dist[j])

{

dist[j]=newdist

previous[j]=u

}

}

}

for(i=0i<G->vexnumi++)

if(dist[i]!=MAXNUM)

printf("从%d到%d的最短路径是 %d\n",v,i,dist[i])

else

printf("从%d到%d无最短路径\n",v,i)

printf("\n")

}

这是Dijkstra算法求单源最短路径算法 上程序中 假定顶点从0开始,搜索整个图,然后求出0到其他各点的最短距离,存放在dist数组中,main函数后面几行是求0到其他各点的路径 基本上能满足你的要求了

#include <stdio.h>

float Calculation(float ,float)

int main()

{

float j = 0, k = 0

printf("请输入你的正常运费和路程:")

if (scanf("%f %f", &j, &k) == 2)

printf("经计算你的运费是:%.2f", Calculation(j, k))

else

printf("你输入的不规范")

getchar()

return 0

}

float Calculation(float j, float k)

{

if (k >3000)

return j * k * (1 - (float)15 / 100)

else if (k >2000)

return j * k * (1 - (float)10 / 100)

else if (k >1000)

return j * k * (1 - (float)8 / 100)

else if (k >500)

return j * k * (1 - (float)5 / 100)

else if (k >250)

return j * k * (1 - (float)2 / 100)

else

return j * k

}