Day2

1.oj 1068

将一个二进制数,转换为对应的十进制数。

输入

输入一个只含有’0’和’1’的字符串,以回车结束,表示一个二进制数。该二进制数无符号位,长度不超过31。

输出

输出一个整数,为该二进制数对应的十进制数。

#include<stdio.h>
int main()
{
	int b = 0;
	char a;
	while (scanf("%c", &a), a != '\n')
	{
		b = 2 * b + a - '0';/*用a字符代表的数字减去 ‘0’代表的字符等于数字a的值*/
	}                       /*不能直接用‘1’所代表的数值*/
	printf("%d\n", b);
	return 0;
}

2.oj 1069

Z同学为了实现暑假去云南旅游的梦想,决定以后每天只消费1元,每花k元就可以再得到1元,一开始Z同学有M元,问最多可以坚持多少天。

输入

输入2个整数M, k,(2 <= k <= M <= 1000)。

输出

输出一个整数,表示M元可以消费的天数。

#include<stdio.h>
int main()
{
	int M, k, i = 0, d = 0;
	scanf("%d %d", &M, &k);
	while (M != 0)
	{
		M--;
		d++;
		i++;
		if (i == k)
		{
			M++;
			i = 0;/*注意 需要将i归零*/
		}
	}
	printf("%d\n", d);
	return 0;
}

3.oj 1070

百钱买百鸡问题:公鸡五文钱一只,母鸡三文钱一只,小鸡三只一文钱,用100文钱买100只鸡,公鸡、母鸡、小鸡各买多少只?
本程序要求解的问题是:给定一个正整数n,用n文钱买n只鸡,问公鸡、母鸡、小鸡各买多少只?

输入

输入一个正整数n(n<=100)。

输出

如果有解,种组合占一行,包含公鸡、母鸡、小鸡的个数,用正整数表示,每个数据占4列。公鸡母鸡小鸡个数均大于等于0,按公鸡数目从小到大输出,公鸡数目相同按母鸡数目从小到大输出,以此类推。如果无解,输出“No Answer”。 

#include<stdio.h>
int main()
{
	int a, b, c, n, answer = 0;/*注意:要赋予answer初始值!!*/
	scanf("%d", &n);
	for (a = 0; a <= n / 5; a++)/*注意:要归零a和b*/
	{
		for (b=0; b <= n / 3; b++)
		{
			c = n - a - b;
			if (c % 3 == 0 && a * 5 + b * 3 + c / 3 == n)/*改为3*n==15*a+b*9+c进行通分*/
			{
				printf("%4d%4d%4d\n", a, b, c);
				answer = 1;/*用来判断是否有答案*/
			}
		}
	}
	if (answer != 1)
		printf("No Answer");
	return 0;
}

4.

马克思手稿中有这样一道趣味数学题:男人、女人和小孩总计n个人,在一家饭店里吃饭,共花了cost先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令,请用穷举法编程计算男人、女人和小孩各有几个。

输入

输入两个正整数,表示人数n和花费cost。

输出

若问题有解,则输出所有解,每行输出三个数据,代表男人、女人和小孩的人数,用空格分隔;若问题无解,则输出“No answer"。

#include<stdio.h>
int main()
{
	int  n, c, m, w, k,answer=0;
 	scanf("%d %d", &n,&c);
	for (m = 0; m <= c / 3; m++)/*穷举法*/
	{
		for (w = 0; w <= c / 2; w++)
		{
			k = n - w - m;
			if (c == k + 2 * w + 3 * m)
			{
				printf("%d %d %d\n", m, w, k);/*将answer赋值与输出结果绑定*/
				answer = 1;
			}
		}
	}
	if (answer != 1)
		printf("No answer\n");
	return 0;
}

5.

1076: 三位数求解

题目描述

已知xyz+yzz=n,其中n是一个正整数,x、y、z都是数字(0-9),编写一个程序求出x、y、z分别代表什么数字。如果无解,则输出“No Answer”
注意:xyz和yzz表示一个三位数,而不是表示x*y*z和y*z*z。

输入

输入一个正整数n。

输出

输出一行,包含x、y、z的值,每个数值占4列。

与上一题相似 也是用”穷举法“

#include<stdio.h>
int main()
{
	int x, y, z, n, answer=0;
	scanf("%d", &n);
	for (x = 1; x <= 9; x++)/*因为是三位数 所以百位不能为零*/
	{
		for (y = 1; y <= 9; y++)/*因为是三位数 所以百位不能为零*/
		{
			for (z = 0; z <= 9; z++)
			{
				if (100 * x + 10 * y + z + y * 100 + z * 11 == n)
				{
					printf("%4d%4d%4d\n", x, y, z);
					answer = 1;
				}
			}
		}
	}
	if (answer != 1)
		printf("No Answer\n");
	return 0;
}

6.

1077: 空心菱形

题目描述

输入一个整数n,(1<=n<=20),输出一个空心菱形,其中每个边由n个'*'组成。

输入

输入包含一个整数,n(1<=n<=20)

输出

输出一个空心菱形,每个边由n个'*'组成

#include<stdio.h>
int main()
{
	int n, x, y, z, a, b;
	scanf("%d", &n);
	for (x = 1; x <= n; x++)/*将菱形分为上下两部分*/
	{
		for (y = 1; y <= 2 * n - 1; y++)
		{
			if (y == (n + 1 - x) || y == (n + x - 1))/*将if内的条件与循环变量联系起来!!*/
				printf("*");
			else
				printf(" ");
		}
		printf("\n");
	}
	for (z = 1; z <= n - 1; z++)
	{
		for (a = 1; a <= 2 * n - 1; a++)
		{
			if (a == z + 1 || a == 2 * n - 1 - z)
				printf("*");
			else
				printf(" ");
		}
		printf("\n");
	}
	return 0;
}


7.

1082: 敲7(多实例测试)

题目描述

输出7和7的倍数,还有包含7的数字例如(17,27,37...70,71,72,73...)

输入

首先输入一个整数t,表示有t组数据。
然后有t行,每行一个整数N。(N不大于30000)

输出

对于每组数据 ,输出从小到大排列的不大于N的与7有关的数字。每组数据占一行,每个数字后面有一个空格;

#include<stdio.h>
#include <stdlib.h>
int main()
{
	int t, N, a, m;
	scanf("%d", &t);
	for (int i = 1; i <= t; i++)
	{
		scanf("%d", &N);
		for (int s = 1; s <= N; s++)
		{
			m = s;
			if (s % 7 == 0)
				printf("%d ", s);
			else/*一定将while放在else中 不然会重复*/
			{
				while (m != 0)
				{
					if (m % 10 == 7)
					{
						printf("%d ", s);
						break;
					}
					else
						m /= 10;
				}
			}
            /*else if(b>10)//判断是否为包含7的数字
			{     s=b;
				for(e=0;d<1000,s>0;e++)
				{
					c[e]=s%10;/*将s每一位存入c[e]中*/
					s/=10;
				}
				for(q=0;q<e;q++)//最后一位在数组中为0要舍去
				{
					if(c[q]==7)
					{
						flag=1;
						break;
		            }也可以*/
		printf("\n");/*如果缺失 则不会换行!*/
	}
	system ("pause");
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值