1.猴子吃桃问题
猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
for(day=1;day<10;day++) //为主要代码,定义未写出
{
n=(n+1)*2; //输出n即可
}
2.输入年月,判断这个月有多少天
思路:先判断输入的月份是否为2月,,再判断年份是否为闰年和平年,然后判断大小年
if(month==2) //month为输入的月份
{
if(age%4==0 && age%100!=0 || age%400==0) //age为输入的年
printf("该月有28天");
else
printf("该月有29天");
}
else if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)
printf("该月有31天");
else
printf("该月有30天");
3.兔子繁衍问题
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
思路:第一第二个月兔子对数都为1,从第三个月开始依次为 2 3 5 8......后一个数等于前两个数相加,因此可得:
#include <stdio.h>
int main(void)
{
int i =0,n,item=0,n1=1,n2=1;
scanf("%d",&n);
if(n==1 || n==2) //兔子第一第二个月都为1对
item=1;
for(i=3;i<=n;i++)
{
item=n1+n2;
printf("第%d个月: %d\n",i,item);
n2=n1;
n1=item;
}
return 0;
}
输出结果:
4.百钱白鸡问题
我有1000块钱我想买100只鸡,市场上公鸡50块一只,母鸡30块一只,小鸡10块钱3只,问题我该如何去购买?列出所有购买方案--------利用穷举法
int m,g,x,n=1;
for(m=0; m<=33;m++){
for(g=0; g<=20;g++){
x=100-m-g;
if((g*50 + m*30 + x/3*10) == 1000 && x%3==0)
{
printf("方案%d:\n" ,n);
printf("母鸡数量为:%d\n",m);
printf("公鸡数量为:%d\n",g);
printf("小鸡数量为:%d\n",x);
printf("\n");
n++;
}
}
}
输出结果: 有68种方案
5.下列试子的值:1-1/2+1/3-1/4+……+1/99-1/100,将结果输出
int i; //1-1/2+1/3-1/4+……+1/99-1/100
double sum = 0.0;
for (i = 1; i <= 100; i++)
{
if (i % 2 == 0)
sum -= 1.0 / i;
else
sum += 1.0 / i;
}
printf("%lf", sum);
6.求1!+2!+3!+……+10!
int i,j,sum=0,num=0; //1!+2!+3!+……+10! 1x1 1x1x2 1x1x2x3
for(i=1;i<=10;i++){
num=1;
for(j=1;j<=i;j++){
num*=j;
}
sum+=num;
}
printf("%d\n",sum);
7.水仙花问题
打印出100~999之间的所有水仙花数。水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3+ 3^3 = 153)
for(i=100;i<=999;i++)
{
x=i/100;
y=i/10%10;
z=i%10;
if((x*x*x+y*y*y+z*z*z)==i)
printf("%d\n",i);
}
8.打印菱形
//打印菱形,没有空格版
#include <stdio.h>
int main()
{
int n = 0,i,j;
scanf("%d", &n);
//打印上半部分 n
for (i = 0; i < n; i++)
{
//打印一行
//打印空格
int j = 0;
for (j = 0; j < n - 1 - i; j++)
{
printf(" ");
}
//打印*
for (j = 0; j < 2 * i + 1; j++)
{
printf("*");
}
printf("\n");
}
//打印下半部分 n-1
for (i = 0; i < n - 1; i++)
{
//打印一行
//打印空格
int j = 0;
for (j = 0; j <= i; j++)
{
printf(" ");
}
//打印*
for (j = 0; j < (n - 1 - i) * 2 - 1; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
9.打印金字塔
#include <stdio.h>
int main(void)
{
int i,j,a,n; // 层数控制 空格打印
printf("请输入层数:");
scanf("%d",&a);
for(i=1;i<=a;i++)
{
for(j=0;j<a-i;j++)
{
printf(" ");
}
for(n=1;n<=i;n++){
printf(" *");
}
printf("\n");
}
return 0;
}
输出结果:
9.打印杨辉三角
思考:三角形的两边都是 1 ,每一行的数的个数等于该行行数。(从第三行开始)被两边的 1 包围着的数据中,每个数等于它上一行前一列的数和上一行本列数之和
#include <stdio.h>
int main()
{
int i, j, n, k, t;
long Buf[21]={0,1}; //用于保存一行数据
printf("请输入杨辉三角形的行数(1 ~ 20):");
scanf("%d",&n);
for( i = 1; i <= n; i++) //输出n行
{
for( j = 0; j < n - i; j++) //每行前面补空格,形成等腰三角图案
printf(" ");
t = 0;
for( j = 1; j <= i; j++)//计算并输出杨辉三角形
{
k = Buf[j];
Buf[j] = t + k; //每个数是上面两数之和(三角计算)
t = k;
printf("%6d", Buf[j]);
}
printf("\n");
}
return 0;
}
打印结果:
10.输入一个字符,如果它是一个大写字母,则把它变成小写字母;如果它是小写字母,则把它变成大写字母;其它字符不变
char a;
printf("请输入一个字符:");
scanf("%c",&a);
if(a >= 65 && a <=90) // a~z ASCII值
printf("%c\n",a+32);
else if(a >=97 && a <= 122) //A~Z
printf("%c\n",a-32);
else
printf("%c\n",a);