012 任意次方的最后三位
求一个整数任意次方后的三位数 ,即求x^y的最后3位数,
//官方
#include<stdio.h>
main()
{
int x, y, z = 1, i;
printf("请输入两个数,x和y(x^y):\n");
scanf(" %d%d \n" , &x, &y);
for(i = 1; i <= y; i++)
{
z =z * x % 1000; //每次乘完都取其后三位。
}
if(z >= 100)
{
printf(" %d%d的最后3位是:%d \n", x, y, z );
}
else
{
printf(" %d%d的最后3位是:0%d \n", x, y, z );
}
}
//ME
#include<stdio.h>
main()
{
int x, y, num = 1, i, ref; //x,y键盘输入,num总和,ref最后3位数。
scanf(" %d %d \n" , &x, &y);
for(i = 0; i < y; i++) //计算总和
{
num *=x;
}
//此部分为了完成总和的最后3位。
ref = num %10 ;
num = num /10;
ref = (num % 10) * 10 + ref;
num = num / 10;
ref = (num % 10) * 100 + ref;
printf(" %d \n", ref );
}
013 计算某日是该年的第几天
编写一个计算天数的程序,用户从键盘中输入年,月,日,在屏幕中输入此日期是该年的第几天?
//————————————————————官方——————————————————
好处:把功能模块化:
#include<stdio.h>
//判断闰年
int leap(int a)
{
if ((a % 4 == 0) && (a % 100 != 0) ||
(a % 400 == 0))
{
return 1;
}
else
{
return 0;
}
}
//计算天数
int number(int year, int m, int d)
{
//存放平年每月天数
int num = 0, i, j, k, a[12] =
{
31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};
//存放闰年每月天数
int b[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if(leap(year) == 1)
{
for(i = 0; i < (m - 1); i++)
{
num += b[i] ;
}
}
else
{
for(i = 0; i < (m - 1); i++)
{
num += a[i] ;
}
}
num += d;
return num;
}
main()
{
int year, mon, day, n;
printf("请输入年月日\n");
scanf(" %d%d%d \n" , &year, &mon, &day);
n += number(year, mon, day);
printf(" 第%d天 \n", n );
}
//--------Me-----------
#include<stdio.h>
static int day_of_month[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; // 每个月的天数
main()
{
int year, mon, day, total, i;
scanf(" %d%d%d \n" , &year, &mon, &day);
//判断是否闰年
if ((year % 4 == 0) && (year % 100 != 0) ||
(year % 400 == 0))
{
day_of_month[1] = 29;
}
else
{
day_of_month[1] = 28;
}
//计算除当月以外的天数
for(i = 0; i < (mon - 1); i++)
{
total += day_of_month[i] ;
}
//添加当月天数
total += day;
printf(" %d \n", total );
}
- 核心:闰年:能被4整除但不能被100整除,或能被400整除
- 月份为m时,累加存储着每月天数的数组的前(m -1)个元素,将累加结果输入day 。
014 婚礼上的谎言
3对情侣参加婚礼,3个新郎A,B,C 3个新娘X,Y,Z。
不知谁和谁结婚:询问:A说将和X,X却说她的未婚夫是C,C说他将和Z结婚,发现他们都在开玩笑。全部都是假话,那么谁和谁结婚?
通过枚举法,将所有可能列举出来,使用if语句进行条件判断,
//—————————————— 官方————————————————————
#include<stdio.h>
main()
{
int a, b, c;
for(a = 1; a <= 3; a++)
{
for(b = 1; b <= 3; b++)
{
for(c = 1; c <= 3; c++)
{
if(a !=1 && c != 1 && c != 3 && a != b && a != c && c != b)
{
printf(" a 将和 %c 结婚 \n", 'X'+ a - 1);
printf(" b 将和 %c 结婚 \n", 'X'+ b - 1);
printf(" c 将和 %c 结婚\n", 'X'+ c - 1);
}
}
}
}
}
//—————— ME ————————
#include<stdio.h>
main()
{
int a, b, c;
for(a = 0; a < 3; a++)
{
for(b = 0; b < 3; b++)
{
for(c = 0; c < 3; c++)
{
//判断条件
if(a !=0 && c != 0 && c != 2 && a != b && a != c && c != b)
{
printf(" a he %c \n", 'X'+ a );
printf(" b he %c \n", 'X'+ b );
printf(" c he %c \n", 'X'+ c );
}
}
}
}
}
015 百元买百鸡
百钱买百鸡问题:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问雏,母,翁各几何?
//官方:
#include<stdio.h>
main()
{
int cock, hen, chick;
for(cock = 0; cock <= 20; cock++)
{
for(hen = 0; hen <= 33; hen++)
{
for(chick = 3; chick <= 99 ; chick ++)
{
if((cock * 5 + hen * 3 + chick / 3 ) == 100 && (cock + hen + chick == 100) && chick % 3 ==0)
{
printf(" 翁鸡:%d 母鸡:%d 小鸡%d \n", cock, hen, chick);
}
}
}
}
}
//———————————————— ME ————————————————————————————
#include<stdio.h>
main()
{
int a, b, c;
for(a = 0; a < (100 / 5); a++)
{
for(b = 0; b < (100 / 3); b++)
{
for(c = 0; c < (100 / 1) ; c ++) //把三只鸡当成一个整体
{
if((a * 5 + b * 3 + c / 3 ) == 100 && (a + b + c == 100) && c % 3 ==0)
{
printf(" 翁:%d 母:%d 小%d \n", a, b, c);
}
}
}
}
}
判断条件:
- 所买鸡钱数总和100.
- 3种鸡数量总和100
- 所买小鸡数目必须为3的整数倍。
016 打渔晒网问题
一个渔夫从2011年1月1日开始每3天打一次🐟,2天晒一次网,输入2011年1月1日以后任意一天,输出该渔夫是打🐟还是晒网
//官方:
#include<stdio.h>
//判断闰年
int leap(int a)
{
if ((a % 4 == 0) && (a % 100 != 0) ||
(a % 400 == 0))
{
return 1;
}
else
{
return 0;
}
}
//计算天数
int number(int year, int m, int d)
{
//存放平年每月天数
int sum = 0, i, j, k, a[12] =
{
31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};
//存放闰年每月天数
int b[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if(leap(year) == 1)
{
for(i = 0; i < (m - 1); i++)
{
sum += b[i] ;
}
}
else
{
for(i = 0; i < (m - 1); i++)
{
sum += a[i] ;
}
}
//以2011开始算,不可忽略,me的忽略了这个,会造成错误。
for(j = 2011;j < year; j++)
{
if(leap(j) == 1)
{
sum +=366;
}
else
{
sum += 365;
}
}
sum += d;
return sum;
}
main()
{
int year, mon, day, n;
printf("请输入年月日\n");
scanf(" %d%d%d \n" , &year, &mon, &day);
n += number(year, mon, day);
if(((n % 5 ) < 4) && ((n % 5) > 0))
{
printf(" 捕鱼\n");
}
else
{
printf(" 晒网\n");
}
}
/ME
#include<stdio.h>
static int day_of_month[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; // 每个月的天数
main()
{
int year, mon, day, total, i;
scanf(" %d%d%d \n" , &year, &mon, &day);
//判断是否闰年
if ((year % 4 == 0) && (year % 100 != 0) ||
(year % 400 == 0))
{
day_of_month[1] = 29;
}
else
{
day_of_month[1] = 28;
}
//计算除当月以外的天数
for(i = 0; i < (mon - 1); i++)
{
total += day_of_month[i] ;
}
//添加当月天数
total += day;
//当余数为1或2 或3时说明在打渔,否则在晒网。
if(((day % 5) < 4) && ((day % 5) >0))
{
printf("捕鱼 \n" );
}
else
{
printf("晒网 \n" );
}
}
注意点:
- 判断输入的年份(2011以后包括2011)是否闰年,
- 输入日期距离2011年1月1日多少天,2011年后是平年(365)还是闰年(366),还要加上选择的日月。
017 判断三角形类型
根据输入的三角形的三边判断三角形的类型,并输出其的面积和类型。
三角形面积公式:
//官方
#include<stdio.h>
#include<math.h>
main()
{
float a, b, c, n;
float s, area;
scanf(" %f%f%f \n" , &a, &b, &c);
if(a + b >c && b + c > a && c + a > b )//直接在此处判断是否满足三角形条件。
{
s = (a + b + c) / 2;
area=(float) sqrt(s * (s - a) * (s - b) * (s - c));
printf(" S = %.06f \n", area);
if(a == b == c)
{
printf(" 等边三角形\n");
}
else if(a == b || a == c || b == c )
{
printf(" 等腰三角形\n");
}
else if ( pow(a, 2) + pow(b, 2) == pow(c, 2) || pow(b, 2) + pow(c, 2) == pow(a, 2) || pow(a, 2) + pow(c, 2) == pow(b, 2) )
{
printf(" 直角三角形\n");
}
else
{
printf(" 普通三角形\n");
}
}
else
{
printf(" 不能构成为三角形\n");
}
}
/// me:
#include<stdio.h>
#include<math.h>
int judge(int a, int b, int c)//判断是否为三角形
{
if(a + b <= c || a +c <= b || b +c <= c)
{
return 0;
}
{
return 1;
}
}
main()
{
int a, b, c, n;
float S;
scanf(" %d%d%d \n" , &a, &b, &c);
n = judge(a, b, c);
if(n == 0)
{
printf(" 不能构成为三角形\n");//无法成为三角形
}
else
{
//计算面积公司
S = (a + b + c) / 2;
S =(float) sqrt(S * (S - a) * (S - b) * (S - c));
printf(" S = %.06f \n", S);
//判断什么三角形
if(a == b == c)
{
printf(" 等边三角形\n");
}
else if(a == b || a == c || b == c )
{
printf(" 等腰三角形\n");
}
else if ( pow(a, 2) + pow(b, 2) == pow(c, 2) || pow(b, 2) + pow(c, 2) == pow(a, 2) || pow(a, 2) + pow(c, 2) == pow(b, 2) )
{
printf(" 直角三角形\n");
}
else
{
printf(" 普通三角形\n");
}
}
}