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;
}