当前位置:首页 » 编程语言 » c语言邮票问题四种不同值的邮票
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言邮票问题四种不同值的邮票

发布时间: 2022-05-23 12:16:19

‘壹’ c语言邮票组合问题,如图,那个例子在写的程序没法得出正确答案,如何修改

#include <stdio.h>
int main()
{
int a[4],n;
int i,count,temp;
for(i=0;i<4;i++)
scanf("%d",&a[i]);

n=6;//第一个数规定是1,所以1-5肯定存在,所以n从6开始
while(1)
{
temp=n;//临时变量存储,防止改变temp时影响到n
count=0;//计数有几张邮票
i=3;//数组长度4,从下标3开始,也是最大的值开始

while(temp>0)
{
while(a[i]>temp)//使a[i]变成小于或等于temp的值,这样才可以拆成小邮票
i--;
count+=temp/a[i];//加上几张a[i]面值的邮票
temp%=a[i];//除去上面使用的邮票剩下的面值
}
if(count>5)//如果使用的邮票超过5张,则错误,即这时的n不符合
break;
n++;
}
printf("[1,%d]\n",n-1);// 不符合的前一个是符合的
return 0;
}

‘贰’ c语言】某人有五张两角的邮票和四张三角的邮票,用这些邮票中的一张或若干张可以得到多少种不同的邮资

下面是我改正后的算法。你看下答案对不对。。。

#include<stdio.h>
voidmain()
{
intn,f3,f2,s=0,t;
for(n=3;n<=22;n++)
{
for(f2=0;f2<=5;f2++)

for(f3=0;f3<=4;f3++)
{

if(n==3*f3+2*f2&&n!=t)
{
t=n;
s++;
}
}


}
printf("s=%d ",s);}

我是这么想的:这里是说邮资的不同,也就是不管你如何组合,只要它的面值相等,就算一种。比如三张2角面值为6,两张3角面值也为6,这只算是一种邮资。把重复的去掉就好了。

‘叁’ 设计一套邮票,设计要求如下:该套邮票由四种不同面值的邮票组成,面值数为正整数,并且对于连续整数1,2

从四种不同面值的邮票中选取面值互不相同且不超过三张的不同取法共有4+6+4=14(种).
不同取法所获得邮票的总面值可能相同,也可能不同,至多只有14种不同的总面值,
∴R≤14(5分)
又∵若设计四种邮票的面值数分别为1,2,4,8.(5分)
∵1=1,2=2,3=1+2,4=4,5=1+4,6=2+4,7=1+2+4,
8=8,9=1+8,10=2+8,11=1+2+8,12=4+8,13=1+4+8,14=2+4+8,
∴R≤14
从而R最大为14,上述四种面值数作为一套,即是符合题意的设计.(5分)
故答案为:14.

‘肆’ C语言--邮票组合问题

#include <stdio.h>

int main()
{
int i,j,count=0;
int result[100];
int temp;
for(i=0;i<=4;i++)
{
for(j=0;j<=3;j++)
{
result[count]=i*3+j*5;
count++;
}
}
printf("种数:%d\n",count);
for(i=0;i<count;i++)
{
for(j=i;j<count;j++)
{
if(result[i]>result[j])
{
temp=result[i];
result[i]=result[j];
result[j]=temp;
}
}
}
printf("邮资种类:");
for(i=0;i<count;i++)
{
printf("%d ",result[i]);
}
printf("\n");
}
结果:
种数:20
邮资种类:0 3 5 6 8 9 10 11 12 13 14 15 16 17 18 19 21 22 24 27

如果不算0的话就是19种

‘伍’ 设计一套邮票,设计要求如下:该套邮票由四种面值的邮票组成,面值数为正整数,并且对于连续整数1,2,3,..

这套邮票面值必有1,还要有2(因为面值不同),这样由1、2可以得到3,那么必须还有4,这样可以得到5(1+4),6(2+4),7(1+2+4).还要有8,这样可以得到:9(1+8),10(2+8),11(1+2+8),12(4+8),13(1+4+8),14(2+4+8) ,n最大是14。 邮票的面值是1、2、4、8

‘陆’ 学Pascal的进~

问题分析:知道每封信邮票数的范围(<=3),邮票有四种类型,编程找出能使面值最大邮票。其算法是:
(1) 面值不同的四种邮票,每封信所贴邮票不超过3张;
(2) 用这四种邮票贴出连续的整数,并且使r值最大;
(3) 用穷举法,找出所有符合条件的解;
(4) 本题用集合的方法统计邮票的面值,提高判重的速度。
设四种邮票的面值分别为:a,b,c,d,根据题意设:
a<b<c<d,因此a=1,用循环语句完成搜索。
Program reborn;
Var a,b,c,d:integer;
X,x0,x1,x2,x3,x4:integer;
st1:set of 1..100;
function number(a,b,c,d:integer):integer;
var n1,n2,n3,n4,sum:integer;
begin
st1:=[];
for n1:=0 to 3 do
for n2:=0 to 3-n1 do
for n3:=0 to 3-n1-n2 do
for n4:=0 to 3-n1-n2-n3 do
begin
if n1+n2+n3+n4<=3 then
begin
sum:=n1*a+n2*b+n3*c+n4*d;
st1:=st1+[sum];
end;
end;
sum:=1;
while sum in st1 do
sum:=sum+1;
number:=sum-1;
end;
begin
a:=1;x0:=0;
for b:=a+1 to 3*a+1 do
for c:=b+1 to 3*b+1 do
for d:=c+1 to 3*c+1 do
begin
x:=number(a,b,c,d);
if x>x0 then
begin
x0:=x;x1:=a;x2:=b;x3:=c;x4:=d;
write(x1:5,x2:5,x3:5,x4:5);
writeln(‘’:10,’x0=’,x0);
end;
end;
end.

‘柒’ C语言,求邮票组合算法或思路

定义一个五元素一维数组,a[0]=0,输入其余四个值,分别是邮票面值。五张邮票所能组成的邮资等于五个变量之和,每一个变量都能在前面定义的一维数组里相互独立地取值,这样通过一个五维的循环就能讨论所有的情况。为了减少重复讨论,可以要求用户按大小顺序输入邮票面值,程序相应改动,这里不好说清。
给你一个绝对能用的程序。楼下的不要学我。
#include<stdio.h>
#include<stdlib.h>
int a[5]={0};
int b[126];
int search(int num)
{
int i,j=0;
for(i=1;i<126;i++)
{
if(b[i]==num)
j++;
}
return (j);
}
void main()
{
for(;!(a[1]<a[2]&&a[2]<a[3]&&a[3]<a[4]);)
{
printf("请按从小到大的顺序输入四种邮票面值:\n");
for(int i=1;i<5;i++)
{
scanf("%d",&a[i]);
}
}
printf("\n");
int i,j,k,m,n;
int t=0;
for(i=0;i<=4;i++)
{
for(j=0;j<=i;j++)
{
for(k=0;k<=j;k++)
{
for(m=0;m<=k;m++)
{
for(n=0;n<=m;n++)
{
b[t]=a[i]+a[j]+a[k]+a[m]+a[n];
t++;
}
}
}
}
}
k=m=n=0;
for(i=a[1];i<=a[4]*5;i++)
{
if(t=search(i))
{
printf("可以组成邮资%d,有%d种方法\n",i,t);
m++;
}
else
{
if(m>k)
{
k=m;
n=i;
}
m=0;
}
}
if(m==a[4]*5-a[1]+1)
printf("\n可组成邮资的一个最大连续区间为[%d,%d]\n",a[1],a[4]*5);
else
printf("\n可组成邮资的一个最大连续区间为[%d,%d]\n",n-k,n-1);
system ("pause");
}