杂乱的编程题目记录

YH

//32
#include <stdio.h>
#include <stdbool.h>
bool people[20000];
int main()
{
	memset(people, 1, sizeof(people));
	int n, m;
	scanf("%d %d", &n, &m);
	printf("请输入n、m:");
	int i = 1, times = 1, t = n;
	while(t>1)
	{
		if (i == 0) i = n;
		if (!people[i])
		{
			i = (i + 1) % n;
		}
		else if (people[i]&&times!=m)
		{
			times++;
			i = (i + 1) % n;
		}
		else if (people[i]&&times==m)
		{
			times=1;
			people[i] = 0;
			i = (i + 1) % n;
			t--;
		}
	}
	for (int j = 1;; j++)
	{
		if (people[j])
		{
			printf("%d", j);
			break;
		}
	}
	return 0;
}
//34
#include <stdio.h>
#include <math.h>
#include <stdbool.h>
bool ss(int n)
{
	if (n == 1) return 0;
	if (n == 2) return 1;
	for (int i = 2; i <= sqrt(n); i++)
		if (n % i == 0) return 0;
	return 1;
}
int arr[1001] = { 0 };
int main()
{
	int m, n, cnt = 0, count = 0;
	scanf("%d %d", &m, &n);
	if (m > n)
	{
		int temp = m;
		m = n;
		n = temp;
	}
	for (int i = m; i <= n; i++)
	{
		if (ss(i)) arr[++cnt] = i;
	}
	for (int j = 1; j <= cnt - 1; j++)
	{
		if (arr[j + 1] - arr[j] == 2)
		{
			count++;
			printf("(%d,%d)\n", arr[j], arr[j + 1]);
		}
	}
	if (count == 0) printf("没有找到");
	else printf("共找到%d对孪生素数", count);
	return 0;
}
//42
#include <stdio.h>
#include <math.h>
#include <stdbool.h>
bool wqs(int n)
{
	int sum = 0;
	for (int i = 1; i <= sqrt(n); i++)
	{
		if (n % i == 0)
		{
			sum += i;
			sum += n / i;
			if (i * i == n) sum -= i;
		}
	}
	sum -= n;
	if (sum == n) return 1;
	return 0;
}
int main()
{
	int n, cnt = 0;
	scanf("%d", &n);
	for (int i = n; i >= 2; i--)
	{
		if (wqs(i)) cnt++;
	}
	printf("%d", cnt);
	return 0;
}

JX

//36
#include <stdio.h>
int main()
{
	int m, n;
	scanf("%d\n%d", &m, &n);
	for (int i = 0; i < m; i++)
	{
		for (int j = 0; j < n; j++)
		{
			printf("(%d,%d)", i, j);
			if (j != n) printf(" ");
		}
		if (i != m) printf("\n");
	}
	return 0;
}
//37
#include <stdio.h>
#include <math.h>
#include <stdbool.h>
bool ss(int n)
{
	if (n == 1) return 0;
	if (n == 2) return 1;
	for (int i = 2; i <= sqrt(n); i++)
		if (n % i == 0) return 0;
	return 1;
}
int main()
{
	int x, k;
	scanf("%d %d", &x, &k);
	int cnt = 0;
	while (k)
	{
		if (ss(x))
		{
			printf("%d ", x);
			k--;
			cnt++;
			if (k)
			{
				if (cnt % 5 == 0) printf("\n");
			}
		}
		x++;
	}
	return 0;
}
//38
#include <stdio.h>
int digit_product(int a)
{
	int ans=1;
	while (a)
	{
		ans *= a % 10;
		a /= 10;
	}
	return ans;
}
int continuous(int a)
{
	int current = 0;
	while (a >= 10)
	{
		current++;
		a = digit_product(a);
	}
	return current;
}
int main()
{
	int a, b,arr[1000];
	scanf("%d %d", &a, &b);
	int result = 0;
	//arr[0]放的是a的
	for (int i = a; i <= b; i++)
	{
		arr[i-a] = continuous(i);
		if (arr[i-a] > result) result = arr[i-a];
	}
	printf("%d\n", result);
	int flag = 0;
	for (int i = a; i <= b; i++)
	{
		if (arr[i-a] == result)
		{
			if (flag) printf(" ");
			printf("%d", i);
			flag = 1;
		}
	}
	return 0;
}
//39
#include <stdio.h>
typedef struct
{
	int index;
	char name[9];
}Stu;
int main()
{
	Stu boy[25],girl[25];
	int n,t,ib=0,ig=0;
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &t);
		if (t) { scanf("%s", boy[ib].name); boy[ib++].index = i; }
		else { scanf("%s", girl[ig].name); girl[ig++].index = i; }
	}
	for (int i = 0; i < n/2; i++)
	{
		if (boy[i].index < girl[i].index) printf("%s %s\n", boy[i].name, girl[i].name);
		else printf("%s %s\n", girl[i].name, boy[i].name);
	}
	return 0;
}
//40
#include <stdio.h>
int arr[1001]={0}, grade[1001] = {0}, flag[1001] = {0};
char c[1001] = { '\0' };
int main()
{
	int i=0,cnt=0;
	while (scanf("%d", &flag[i])!=EOF)
	{
		cnt++;
		if (flag[i])
			scanf("%d,%c", &arr[i], &c[i]);
		else scanf("%d,%d", &arr[i], &grade[i]);
		i++;
	}
	for (int j = 0; j < cnt; j++)
	{
		if (flag[j])
			printf(" %d  %c\n", arr[j], c[j]);
		else printf(" %d  %d\n", arr[j], grade[j]);
	}
	return 0;
}

神秘15T

//46
#include <stdio.h>
void hanoi(int n, char a, char b, char c)
{
	if (n == 1)
		printf("1 %c->%c\n", a, c);
	else
	{
		hanoi(n - 1, a, c, b);
		printf("%d %c->%c\n",n, a, c);
		hanoi(n - 1, b, a, c);
	}
}
int main()
{
	int n,flag=0;
	while (scanf("%d", &n) == 1)
	{
		if (flag) printf("\n");
		hanoi(n, 'A', 'B', 'C');
		flag = 1;
	}
	return 0;
}
//47
#include <stdio.h>
int dp[105][105];
//动态规划,用二维数组dp存储中间结果
//当dp[n][m](原本的返回值)已经计算过时,直接返回
int f(int n, int m)
{
	if (n < m) return f(n, n);
	//如果最大加数比n大,那就不能加这么大,这是关键
	if (n == 0) return 1;
	if (m == 0) return 0;
	if (dp[n][m] != 0) return dp[n][m];
	dp[n][m]= f(n - m, m) + f(n, m - 1);
	return dp[n][m];
	//如果算式中最大数有m,那就是n-m个数的情况;如果没有最大加数m-1接着推
}
int main()
{
	int n, m, ans;
	scanf("%d %d", &n, &m);
	ans = f(n, m);
	printf("%d", ans);
	return 0;
}
//48
#include <stdio.h>
int f(int n)
{
	if (n == 1 || n == 2) return 1;
	return f(n - 1) + f(n - 2);
}
int main()
{
	int n,flag=0;
	scanf("%d", &n);
	for (int i = 1; i <= n; i++)
	{
		printf("%-10d", f(i));
		flag++;
		if (flag % 4 == 0) printf("\n");
	}
	return 0;
}
//49
#include <stdio.h>
#include <math.h>
//已知温度 露点求湿度H
double caculate_humidex(double temp, double dew)
{
	double e = 6.11 * exp(5417.7530 * ((1 / 273.16) - (1 / (273.16 + dew))));
	double h = 0.5555 * (e - 10);
	return temp + h;
}
//已知露点 湿度 求温度T
double caculate_temp(double dew, double humidex)
{
	double e = 6.11 * exp(5417.7530 * ((1 / 273.16) - (1 / (273.16 + dew))));
	double h = 0.5555 * (e - 10);
	return humidex - h;
}
//已知温度 湿度 求露点D
double caculate_dew(double temp, double humidex)
{
	double ans = 0;
	for (double delta=100; delta>1e-4; delta*=0.5)
	{
		if (caculate_humidex(temp, ans) > humidex)
			ans -= delta;
		else ans += delta;
	}
	return ans;
}
int main()
{
	char c1, c2;
	double a1, a2, a3;
	int cnt = 0;
	while (1)
	{
		scanf("%c", &c1);
		if (c1 == 'E') break;
		scanf("%lf %c %lf", &a1,&c2, &a2);
		if (c1 == 'T' && c2 == 'D')
		{
			a3 = caculate_humidex(a1, a2);
			printf("T %.1lf D %.1lf H %.1lf\n",a1,a2,a3);
		}
		else if (c1 == 'T' && c2 == 'H')
		{
			a3 = caculate_dew(a1, a2);
			printf("T %.1lf D %.1lf H %.1lf\n", a1, a3, a2);
		}
		else if (c1 == 'D' && c2 == 'T')
		{
			a3 = caculate_humidex(a2, a1);
			printf("T %.1lf D %.1lf H %.1lf\n", a2, a1, a3);
		}
		else if (c1 == 'H' && c2 == 'T')
		{
			a3 = caculate_dew(a2, a1);
			printf("T %.1lf D %.1lf H %.1lf\n", a2, a3, a1);
		}
		else if (c1 == 'D' && c2 == 'H')
		{
			a3 = caculate_temp(a1, a2);
			printf("T %.1lf D %.1lf H %.1lf\n", a3, a1, a2);
		}
		else if (c1 == 'H' && c2 == 'D')
		{
			a3 = caculate_temp(a2, a1);
			printf("T %.1lf D %.1lf H %.1lf\n", a3, a2, a1);
		}
	}
	return 0;
}
//50
#include <stdio.h>
int main()
{
    printf("x=11,y=32,z=13\nx=21,y=22,z=13\nx=11,y=12,z=13");
    return 0;
}
//51
#include <stdio.h>
int main()
{
	int a[101] = { 0 };
	char str[101],*p;
	fgets(str, sizeof(str), stdin);
	int i = 0;
	//利用指针遍历字符串
	for (p = str; *p; p++)
	{
		if (*p >= '0' && *p <= '9')
		{
			int num = 0;
			while (*p >= '0' && *p <= '9')
			{
				num = num * 10 + (*p - '0');
				p++;
			}
			a[i++] = num;
		}
	}
	printf("%d\n", i);
	for(int j=0;j<i;j++)
	{
		printf("%d", a[j]);
		if (j != i - 1) printf(" ");
	}
	return 0;
}
//52
#include <stdio.h>
int main()
{
	int max = -1, temp,cnt=0;
	do {
		scanf("%d", &temp);
		if (temp < 0 && cnt == 0)
		{
			printf("NULL!");
			return 0;
		}
		if (temp > max) max = temp;
		cnt++;
	} while (temp >= 0);
	printf("max=%d", max);
	return 0;
}
//53
#include <stdio.h>
void swap(int* a, int* b)
{
	int temp = *a;
	*a = *b;
	*b = temp;
	return ;
}
int main()
{
	int a[3];
	scanf("%d %d %d", &a[0], &a[1], &a[2]);
	for (int i = 0; i <3-1; i++)
	{
		for (int j = 0; j < 3 - i - 1; j++)
			if (a[j] < a[j + 1]) swap(&a[j], &a[j + 1]);
	}
	printf("%d,%d,%d", a[0], a[1], a[2]);
	return 0;
}
//54
#include <stdio.h>
#include <string.h>
void StringSort(char *stringpoint[],int n)
{
    for(int i=0;i<n-1;i++)
    {
        for(int j=0;j<n-i-1;j++)
        {
            if(strcmp(stringpoint[j],stringpoint[j+1])>0)
            {
                char *temp=stringpoint[j];
                stringpoint[j]=stringpoint[j+1];
                stringpoint[j+1]=temp;
            }
        }
    }
}
int main()
{
    char strings[3][1001];
    char *stringpoint[3];
    for(int i=0;i<3;i++)
    {
        scanf("%s",strings[i]);
        stringpoint[i]=strings[i];
    }
    StringSort(stringpoint,3);
    for(int i=0;i<3;i++)
    {
        printf("%s",stringpoint[i]);
        if(i!=2) printf("\n");
    }
    return 0;
}
//55
#include <stdio.h>
void swap10(int arr[])
{
	int i = 0, j = 9;
	for (; i <= 4; i++, j--)
	{
		int t = arr[i];
		arr[i] = arr[j];
		arr[j] = t;
	}
	return ;
}
int main()
{
	int arr[10];
	for (int i = 0; i < 10; i++)
		scanf("%d", &arr[i]);
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
	swap10(arr);
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}
//56
#include <stdio.h>
int main()
{
	int n;
	const char mon[12][16] = { "January","February","March","April",
		"May","June","July","August",
		"September","October","November","December" };
	do {
		scanf("%d", &n);
		if (n > 0) printf("%s\n", mon[n - 1]);
	} while (n != -1);
	return 0;
}
//57
#include <stdio.h>
void my_swap(int arr[], int a, int b)
{
	if (b == 0) return;
	int right = a + b - 1;
	if (a + b - 1 > 10) right = 10;
	while (1)
	{
		int temp = arr[a];
		arr[a] = arr[right];
		arr[right] = temp;
		a++;
		right--;
		if (a >= right) break;
	}
	return;
}
int main()
{
	int arr[11];
	arr[0] = 0;
	for (int i = 1; i <= 10; i++)
		scanf("%d", &arr[i]);
	int a, b;
	scanf("%d %d", &a, &b);
	my_swap(arr, a, b);
	for (int i = 1; i <= 10; i++)
		printf("%d ", arr[i]);
	return 0;
}
//58
#include <stdio.h>
int main()
{
	char str[] = "software";
	char* p = str;
	for (; *p != '\0'; p += 2)
		printf("%c", *p);
	return 0;
}
//59
#include <stdio.h>
int row, column,max=-1;
void insert(int a[][5])
{
	for (int i = 0; i < 3; i++)
		for (int j = 0; j < 5; j++)
			scanf("%d", &a[i][j]);
	return;
}
void find(int a[][5])
{
	for (int i = 0; i < 3; i++)
		for (int j = 0; j < 5; j++)
			if (a[i][j] > max)
			{
				max = a[i][j];
				row = i;
				column = j;
			}
	return;
}
void print()
{
	printf("最高分是:%d\n行数是:%d\n列数是:%d", max, row, column);
	return;
}
int main()
{
	int gpa[3][5];
	insert(gpa);
	find(gpa);
	print(gpa);
	return 0;
}
//60
#include <stdio.h>
void Swap(int* x, int* y)
{
	int temp = *x;
	*x = *y;
	*y = temp;
	return;
}
int main()
{
	int x, y;
	scanf("%d %d", &x, &y);
	Swap(&x, &y);
	printf("%d %d", x, y);
	return 0;
}

数学相关

1.裴蜀定理

简单地说,对于互质的两个数a、b,其不能组成的最大数为 a*b-a-b

即大于这个数的数一定都能表示为a*x+b*y的形式(x,y∈R)

例题直达:Acwing_1205.买不到的数目

2.级数

(待研究!)

题源:蓝桥杯·算法双周赛第22场小白入门赛

dalao的题解思路:

正难则反

1.别人都加等于自己减少

题源:蓝桥杯·算法双周赛第22场小白入门赛

错误代码主函数部分(大模拟,TLE)

int main()//TLE Code
{
    cin>>n;
    for(int i=0;i<n;i++) scanf("%d",&a[i]);
    sort(a,a+n);
    int cnt=0;
    bool flag=true;
    while(flag)
    {
        for(int i=n-1;i>=1;i--)
        {
            int gap=a[i]-a[0];
            for(int j=0;j<n;j++) a[j]+=gap;
            a[i]-=gap;
            cnt+=gap;
            if(a[i]==a[i-1])
            {
                flag=false;
                break;
            }
        }
    }
    cout<<cnt;
    return 0;
}

千万别像我最开始这样大模拟+小优化(划掉

正解:

为除自己以外的所有小伙伴带回一个能量晶石 == 自己扔一个能量晶石

那么扫一遍拿到最小值,再扫一遍,res+=a[i]-minv即可,时间复杂度O(n)

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>

using namespace std;

const int N=100010;
int n;
int a[N];

int main()
{
    cin>>n;
    for(int i=0;i<n;i++) scanf("%d",&a[i]);
    int minv=2e9;
    //扫一遍拿到最小值
    for(int i=0;i<n;i++) minv=min(minv,a[i]);
    long long res=0;
    for(int i=0;i<n;i++) res+=a[i]-minv;
    cout<<res;
    return 0;
}

持续更新ing~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值