本文最后编辑于 前,其中的内容可能需要更新。
noi-oj 意为 全国青少年信息学奥林匹克竞赛-算法
初中的时候比过,那时候没比好。跟个憨包一样。于是现在回过头来刷刷题,记录一下

1 2 3 4 5 6 7 8 9
| #include<stdio.h> int main() { float a; //定义float类型名为a的变量 scanf("%f",&a); //接受一个浮点型的变量 printf("%.4lf",(a-32)*5/9); //.4lf为保留4位小数的lf长整形输出控制符,后面那一串即是华氏转摄氏的公式 return 0; }
|
1002

这题用海伦公式求解,所以贴张海伦公式的图片

1 2 3 4 5 6 7 8 9 10 11
| #include<stdio.h> #include<math.h> int main() { float a,b,c,p; //定义4个float类型的变量 scanf("%f%f%f",&a,&b,&c); //接受传来的三个值 p=(a+b+c)/2; //海伦公式的p(三角形的半周长) printf("%.4lf",sqrt(p*(p-a)*(p-b)*(p-c))); //海伦公式的S(三角形的面积),已保留4位小数 return 0; }
|
1003

1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include<stdio.h> int main() { int num; //定义一个int类型的整数 scanf("%d",&num); //接受一个int类型的数 printf("%d",(num*1000+num)/1001); //由467->467467 。只需要把467*1000+467即可。 // 11->1111 只需要把11*100+11j即可。 // 规律就是如果一个数要加在同一个数后。直接把此数乘上自己+1位数的10位数倍就可以 //1001 即是把题目 7*11*13=1001 return 0; }
|
1004

1 2 3 4 5 6 7 8 9 10 11 12
| #include<stdio.h> int main() { long n,m,a; //用long是因为题目数据 scanf("%ld %ld %ld",&n,&m,&a); printf("%ld\n",(n/a)*(m/a)); //默认用 / 号就是整除的,往小的地方取数。 //原理就是把矩形两边的数跟正方形的边除。得到一个可以的范围。在把另一边也进行除计算,在把两个结果乘起来 return 0; }
|
1005

1 2 3 4 5 6 7 8 9
| #include <stdio.h> #include <math.h> int main() { float R,X,P; //定义三个浮点数 scanf("%f %f %f",&R,&X,&P); //接受三个数 printf("%.2f",pow((100+R)/100, P)*X); //直接进行计算。pow是乘方 return 0; }
|
1006

1 2 3 4 5 6 7 8 9
| #include <stdio.h> int main() { int a,b,c; //定义三个整数 scanf("%d %d %d",&a,&b,&c); //直接接受三个整数 printf("%d",20-(a+b+c)); //用20减去三个数的合,就是最后一个石头的重量 return 0; }
|
1007

1 2 3 4 5 6 7 8 9 10 11
| #include <stdio.h> int main() { float a,b,c; scanf("%f %f",&a,&b); printf("%.2f",a-b*(int)(a/b)); //余数=被除数-除数 ×商 //a/b算出商。在用除数×商 //余数定义参考:https://baike.baidu.com/item/%E4%BD%99%E6%95%B0/6180737?fr=aladdin return 0; }
|
1008

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include <stdio.h> #include <math.h> int main() { int n; scanf("%d",&n); if (pow(n%10,3)+pow(n/10%10,3)+pow(n/100,3)==n) //通过n%10取到个位,通过n/10%10取到十位,n/100取到百位,在把每一位的三次方相加与n比较 { printf("YES"); } else { printf("NO"); } return 0; }
|
1009

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #include <stdio.h> int main() { int b,g; scanf("%d %d",&b,&g); if(b+g<10) //第一种情况男女总和小于10 { printf("water"); } else if(b+g>=10&b>g) //总人数大于等于10且男生多于女生 { printf("tree"); } else if(b+g>=10&b<=g) //总人数大于等于10人且男生不多于女生(不多于) { printf("tea"); } return 0; }
|
1010

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #include <stdio.h> int main() { float weight; scanf("%f",&weight); if(weight<=10) { printf("%.2f",weight*0.80+0.20); //直接计算第一个段 } else if(10<weight&weight<=20) { printf("%.2f",(weight-10)*0.75+8.20); //分段计算。把第一段的8和0.2已经加上 } else if(20<weight&weight<=30) { printf("%.2f",(weight-20)*0.70+15.70); //分段计算。第一段的8+第二段的7.5+0.2 } else { printf("Fail"); } return 0; }
|
1011

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include <stdio.h> int main() { float x,y; scanf("%f %f",&x,&y); if(x<=1&x>=-1&y<=1&y>=-1) //画个图,直接看出来,如果需要在正方形内的话。就要判断两边的条件 //也可以把y的条件写在下面 { printf("Yes"); } else { printf("No"); } return 0; }
|
1012

这题有应用到ascii,所以贴上ascii码表

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #include <stdio.h> int main() { int n; scanf("%d",&n); if(n%123>=97&n%123<=122) //第一个摸123,判断是否大写 { printf("%c",n%123); //用%c来转换 } else if(n%91>=65&n%91<=90) //第二个摸91,判断是否小写 { printf("%c",n%91); //用%c来转换 } else //判断是否可变换大小写,最后一种情况 { printf("*"); } return 0; }
|
1013

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #include <stdio.h> #include <math.h> int main() { int a,b,c; scanf("%d %d %d",&a,&b,&c); if(a+b>c&&a+c>b&&b+c>a) //判断是否能构成三角形 { if(a==b && b==c) //判断是否是等边三角形 { printf("Equilateral"); } 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("Right"); } else //其它三角形 { printf("General"); } } else { printf("NO"); } return 0; }
|
1014

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #include <stdio.h> int main() { //输入某学生成绩score,根据成绩好坏输出相应评语。如果成绩在大于等于90,输出“Excellent”; //如果成绩在大于等于80分且小于90分,输出“Good”; //如果成绩大于等于60分且小于80分,输出“Pass”; //成绩小于60分,输出“Fail”。 int score; scanf("%d",&score); if(score>=90) { printf("Excellent"); } else if(score>=80&&score<90) { printf("Good"); } else if(score>=60&&score<80) { printf("Pass"); } else { printf("Fail"); } return 0; }
|
1015

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include <stdio.h> int main() //输入数字1~7的表示星期一至星期日,输出对应的星期几的英文名称。 //如果是1,输出Monday; //如果是2,输出Tuesday; //如果是3,输出Wednesday; //如果是4,输出Thursday; //如果是5,输出Friday; //如果是6,输出Saturday; //如果是7,输出Sunday; //通过数组的方式,直接输入多少就直接取出第几个数,因为数组第一位为0。所以需要把第一个补空。第二个开始才是星期一。 { int d; char *days[]={"","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"}; scanf("%d",&d); printf("%s",days[d]); return 0; }
|
1016

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| #include <stdio.h> int main() { int year,month; scanf("%d%d",&year,&month); if(year%4==0 && year%100!=0 && month==2 || year%400==0 && month==2) //1、能被4整除,但不能被100整除;2、能被400整除; { printf("29"); } else //非闰年的情况 , 用分支直接进行判断 { if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12) { printf("31"); } else if(month==4 || month==6 || month==9 || month==11) { printf("30"); } else { printf("28"); } } return 0; }
|
1017

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #include <stdio.h> int main() //编程实现以下功能:查询水果的单价。有4种水果,苹果(apples)、梨(pears)、桔子(oranges)和葡萄(grapes), //单价分别是3.00元/公斤,2.50元/公斤,4.10元/公斤和10.20元/公斤。 //运行程序后,首先在屏幕上显示以下菜单(编号和选项)(见样例)。 //当用户输入编号1~4,显示相应水果的单价(保留1位小数);输入0,退出查询;输入其他编号,显示价格为0。 { printf("[1] apples\n[2] pears\n[3] oranges\n[4] grapes\n[0] Exit\n"); float fruits[]={0,3.0,2.5,4.1,10.2}; int num; scanf("%d",&num); if (num>=0&&num<=4) //判断输入的数在不在0-4之间 { if(num==0) { return 0; } printf("price=%.1f",fruits[num]); } else //特殊情况 { printf("price=0"); } return 0; }
|
1018

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #include <stdio.h> int main() //某市的IC卡电话计费标准如下:首次为0.5元/3分钟(不足3分钟按3分钟计费),之后是0.2元/1分钟,不足一分钟按一分钟来算, //如一个人打了6分30秒,那计费是按照7分钟来算,花费为1.3元。已知某人打一次电话花费为x元, //问这个人有可能打了多长时间的电话?(精确到分钟) { float x; int time; scanf("%f",&x); if(x<=0.5) //第一种3分钟的情况 { printf("3"); } else { x=(x-0.5)/0.2+3; //超过三分钟 printf("%.0f",x); } return 0; }
|

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #include <stdio.h> int main() { double x; scanf("%lf",&x); if(x<5) { printf("%0.3lf",x+2.5); } else if(x<10) { printf("%0.3lf\n",2-1.5*(x-3)*(x-3)); } else { printf("%0.3lf",x/2-1.5); } return 0; }
|
1020

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| #include <stdio.h> #include <string.h> int main() { int a,b; int i; scanf("%d",&a); b=a; for(i=0;a>0;i++) { a=a/10; } printf("%d\n",i); if(i==4) //千位 一个一个取 { printf("%d\n%d\n%d\n%d\n",b/1000,b%1000/100,b%1000%100/10,b%1000%100%10); } else if(i==3) //百位 { printf("%d\n%d\n%d",b/100,b%100/10,b%100%10); } else if(i==2) //十位 { printf("%d\n%d",b/10,b%10); } else //个位直接打印就可 { printf("%d",b); } return 0; }
|