第一季
1.Hello World
#include<stdio.h>
int main(){
printf("Hello World\n");
return 0;
}
2.A+B
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,b;
scanf ("%d%d",&a,&b);
printf("%d",a + b);
}
3.数据类型大小及范围
#include<stdio.h>
int main(){
int n;
scanf ("%d",&n);
if (n == 1)
printf("1,-128,127\n");
if (n == 2)
printf("1,0,255\n");
if (n == 3)
printf("2,-32768,32767\n");
if (n == 4)
printf("2,0,65535\n");
if (n == 5)
printf("4,-2147483648,2147483647\n");
if (n == 6)
printf("4,0,4294967295\n");
if (n == 7)
printf("8,-9223372036854775808,9223372036854775807\n");
if (n == 8)
printf("8,0,18446744073709551615\n");
if (n == 9)
printf("8,-9223372036854775808,9223372036854775807\n");
if (n == 10)
printf("8,0,18446744073709551615\n");
}
4.平均值
#include <stdio.h>
int main()
{
long long a, b;
long long c;
scanf("%lld %lld", &a, &b);
c = (a + b) / 2;
printf("%lld", c);
}
5.进制转换
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
int n;
int main(){
scanf ("%d",&n);
printf("%X,%o",n,n);
}
6.浮点数输出
#include <stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
int main()
{
double n;
scanf("%lf", &n);
printf("%.6lf,%.2lf,%.8lf", n, n, n);
}
7.动态宽度输出
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
char a[105];
int n;
int main()
{
scanf("%s", a);
scanf("%d", &n);
int l = strlen(a);
for (int i = 1; i <= n - l;i ++)
printf("0");
puts(a);
}
8.计算地球上两点间距离
#include <stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
double hav (double x){
double s = sin(x / 2);
return s * s;
}
int main()
{
double a1, b1, a2, b2;
scanf("%lf%lf%lf%lf", &a1, &b1, &a2, &b2);
a1 = a1 / 180 * acos(-1.0);
a2 = a2 / 180 * acos(-1.0);
b1 = b1 / 180 * acos(-1.0);
b2 = b2 / 180 * acos(-1.0);
double t1 = hav(a1 - a2) + cos(a1) * cos(a2) * hav(b1 - b2);
printf("%.4lfkm",asin(sqrt(t1)) * 2 * 6371.0);
}
/*
34.260958 108.942369
55.755825 37.617298
*/
9.风寒指数
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
int main(){
double a, b;
scanf("%lf%lf", &a, &b);
printf("%.0lf", 13.12 + 0.6215 * b - 11.37 * pow(a, 0.16) + 0.3965 * b * pow(a, 0.16));
}
10.颜色模型转换
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#define max(a, b) a > b ? a : b
#define min(a, b) a > b ? b : a
int main()
{
double r, g, b;
double maxn, minn, h, s, v;
scanf("%lf%lf%lf", &r, &g, &b);
r /= 255.0, g /= 255.0, b /= 255.0;
maxn = max(r, g);
maxn = max(maxn, b);
minn = min(r, g);
minn = min(minn, b);
v = maxn;
if (v == 0)
s = 0;
else
s = (maxn - minn) / maxn;
if (maxn == r)
h = 60 * (0 + (g - b) / (maxn - minn));
if (maxn == g)
h = 60 * (2 + (b - r) / (maxn - minn));
if (maxn == b)
h = 60 * (4 + (r - g) / (maxn - minn));
if (h < 0)
h += 360;
printf("%.4lf,", h);
printf("%.4lf", s * 100);
putchar('%');
putchar(',');
printf("%.4lf", v * 100);
putchar('%');
}
第二季
1.方阵
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
int n;
int main()
{
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
printf("%-3d", abs(j - i));
printf("\n");
}
}
2.组合数
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
int n,ans;
int main(){
scanf ("%d",&n);
for (int i = 0;i <= 9;i ++)
for (int j = 0;j <= 9;j ++)
for (int k = 0;k <= 9;k ++)
if ((n - i - j - k) >= 0 && (n - i - j - k) <= 9)
ans ++;
printf("%d",ans);
}
3.幂数模
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
long long a, b, m, ans;
long long qkpow(long long x,long long y){
if (y == 0)
return 1;
long long t = qkpow(x,y / 2) % m;
if (y % 2)
return t * t % m * x % m;
else
return t * t % m;
}
int main()
{
scanf("%lld%lld%lld", &a, &b, &m);
ans = 1;
while (b)
{
if (b % 2 == 1)
ans = ans * a % m;
b /= 2;
a = a * a % m;
}
printf("%lld", ans);
}
4.倍数和
不要开longlong,暴力求解,不要用等差数列
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
int t, n;
int ans;
int ind;
int main()
{
scanf("%d", &t);
while (t--)
{
ans = 0;
scanf("%d", &n);
for (int i = 3;i < n;i += 3)
ans += i;
for (int i = 5;i < n;i += 5)
ans += i;
for (int i = 15;i < n;i += 15)
ans -= i;
printf("%d\n",ans);
}
}
5.乘数模
数据水,本应用高精
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
long long t, n;
long long read()
{
long long s = 0;
int f = 1;
char c = getchar();
while (c < '0' || c > '9')
{
if (c == '-')
f = -1;
c = getchar();
}
while (c >= '0' && c <= '9')
{
s = s * 10 + c - '0';
c = getchar();
}
return s * f;
}
int main()
{
long long a,b,m;
scanf ("%lld%lld%lld",&a,&b,&m);
printf("%lld",(a % m) * (b % m) % m);
}
6.级数和
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
int n;
double ans;
int main()
{
scanf ("%d",&n);
for (int i = 1;i <= n;i ++){
if (i % 10 == 9)
printf("%d.%d",i,(i+1) / 10);
else
printf("%d.%d",i,i + 1);
ans += i;
if (i < 9)
ans = ans + (i + 1) / 10.0;
else if (i < 99)
ans = ans + (i + 1) / 100.0;
else
ans = ans + (i + 1) / 1000.0;
if (i != n)
printf("+");
}
printf("=%.2lf",ans);
}
7.比率
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
int n,a,ind,flag;
char s[10005];
int gcd(int x,int y){
int t;
while (y){
t = x % y;
x = y;
y = t;
}
return x;
}
int getpow(int x,int y){
int ans = 1;
while(y --)
ans = x * ans;
return ans;
}
int main()
{
scanf("%s",s);
int l = strlen(s);
for (int i = 0;i < l;i ++){
if (s[i] == '.'){
flag = 1;
continue;
}
if (s[i] < '0' || s[i] > '9')
continue;
a = a * 10 + s[i] - '0';
if (flag)
ind ++;
}
int c = getpow(10,ind);
int b = gcd(a,c);
printf("%d/%d",a / b,c / b);
}
8.分数的加减乘除法
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
int n, a1, a2, b1, b2, ind, flag = 1;
char s[10005];
int gcd(int x, int y)
{
int t;
while (y)
{
t = x % y;
x = y;
y = t;
}
return x;
}
int getpow(int x, int y)
{
int ans = 1;
while (y--)
ans = x * ans;
return ans;
}
int main()
{
scanf("%d/%d\n%d/%d", &a1, &a2, &b1, &b2);
int ans1 = a1 * b2 + a2 * b1;
int ans2 = a2 * b2;
n = gcd(ans1, ans2);
printf("(%d/%d)+(%d/%d)=%d/%d\n", a1, a2, b1, b2, ans1 / n, ans2 / n);
ans1 = (a1 * b2 - a2 * b1);
if(ans1 < 0)
ans1 = abs(ans1),flag = -1;
n = gcd(ans1,ans2);
printf("(%d/%d)-(%d/%d)=%d/%d\n", a1, a2, b1, b2, ans1 * flag / n, ans2 / n);
ans1 = a1 * b1,ans2 = a2 * b2;
n = gcd(ans1,ans2);
printf("(%d/%d)*(%d/%d)=%d/%d\n", a1, a2, b1, b2, ans1 / n, ans2 / n);
ans1 = a1 * b2,ans2 = a2 * b1;
n = gcd(ans1,ans2);
printf("(%d/%d)/(%d/%d)=%d/%d\n", a1, a2, b1, b2, ans1 / n, ans2 / n);
}
9.操作数
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
int k;
int main()
{
int n;
scanf("%d",&n);
while (n > 0){
int a = 0,t = n;
while (t){
a += t % 10;
t /= 10;
}
n -= a;
k ++;
}
printf("%d",k);
}
10.对称数
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
int k,flag;
char s[10005];
int main()
{
scanf ("%s",s);
int l = strlen(s);
for (int i = 0;i < l / 2;i ++){
if (s[i] == '3' || s[i] == '4' || s[i] == '7'){
flag = 1;
break;
}
if (s[i] == '0' && s[l - i + 1] != '0'){
flag = 1;
break;
}
if (s[i] == '1' && s[l - i - 1] != '1'){
flag = 1;
break;
}
if (s[i] == '2' && s[l - i - 1] != '2'){
flag = 1;
break;
}
if (s[i] == '5' && s[l - i - 1] != '5'){
flag = 1;
break;
}
if (s[i] == '6' && s[l - i - 1] != '9'){
flag = 1;
break;
}
if (s[i] == '8' && s[l - i - 1] != '8')
{
flag = 1;
break;
}
if (s[i] == '9' && s[l - i - 1] != '6')
{
flag = 1;
break;
}
}
if (flag)
printf("No\n");
else
printf("Yes\n");
}
第三季
1.余数和
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
int n,k;
long long ans;
int main(){
scanf ("%d%d",&n,&k);
for (int i = 1;i <= n;i ++)
ans = ans + k % i;
printf("%lld",ans);
}
2.好数字
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#define M 1000000007
long long n,n1,n2;
long long qkpow(long long a,long long p){
long long ans = 1,x = a;
while (p){
if (p % 2)
ans = ans * x % M;
x = x * x % M;
p /= 2;
}
return ans;
}
int main(){
scanf ("%lld",&n);
n2 = n / 2;
n1 = n % 2 ? (n2 + 1) : n2;
printf("%lld",qkpow(5,n1) * qkpow(4,n2) % M);
}
3.方案数
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
int n,ans;
int main(){
scanf ("%d",&n);
for (int i = 1;i <= n;i ++){
if (i % 2)
if (n % i == 0)
ans ++;
else if (n % i == i / 2)
ans ++;
}
printf("%d",ans);
}
4.查找数列
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
int n;
long long s;
int main(){
scanf("%d",&n);
for (long long i = 1;i <= n;i ++){
long long s1 = i * (i + 1) / 2;
if (s1 > n){
printf("%d",n - s);
return 0;
}
s = s1;
}
}
5.倒水
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#define min(a,b) a>b?b:a
int n,m,d,ans = 2147483647;
int flag[1005][1005];
void dfs(int x,int y,int step){
if ((flag[x][y] <= step && step != 0) || step > ans)
return ;
flag[x][y] = step;
if(x == d || y == d){
ans = min(ans,step);
return ;
}
if (x != m)//倒满杯1
dfs(m,y,step + 1);
if (y != n)//倒满杯二
dfs(x,n,step + 1);
if (x)//倒1
dfs(0,y,step + 1);
if (y)//倒2
dfs(x,0,step + 1);
if (x && y != n){//1倒2
int t = n - y;
if (x <= t)
dfs(0,y + x,step + 1);
else
dfs(x - t,n,step + 1);
}
if (y && x != m){//2倒1
int t = m - x;
if (y <= t)
dfs(x + y,0,step + 1);
else
dfs(m,y - t,step + 1);
}
return ;
}
int main(){
scanf ("%d%d%d",&m,&n,&d);
memset(flag,10000,sizeof(flag));
dfs(0,0,0);
printf("%d\n",ans);
}