- 点击跳转专栏=>Unity3D特效百例
- 点击跳转专栏=>案例项目实战源码
- 点击跳转专栏=>游戏脚本-辅助自动化
- 点击跳转专栏=>Android控件全解手册
- 点击跳转专栏=>Scratch编程案例
- 点击跳转=>软考全系列
- 点击跳转=>蓝桥系列
👉关于作者
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎底部卡片私我,获取更多支持,交流让学习不再孤单。
👉实践过程
需要所有整理的文档可底部卡片联系我,直接发压缩包。
😜完美的代价
问题描述
回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。
交换的定义是:交换两个相邻的字符
例如mamad
第一次交换 ad : mamda
第二次交换 md : madma
第三次交换 ma : madam (回文!完美!)
输入格式
第一行是一个整数N,表示接下来的字符串的长度(N <= 8000)
第二行是一个字符串,长度为N.只包含小写字母
输出格式
如果可能,输出最少的交换次数。
否则输出Impossible
样例输入
5
mamad
样例输出
3
#include <stdio.h>
void swap(char* a, char* b)
{
char c = *a;
*a = *b;
*b = c;
}
int find(char* p, char* q)
{
char* o = q - 1;
while (o > p && *o != *p) o--;
return o - p;
}
int rfind(char*p, char* q)
{
char* o = q + 1;
while (o < p && *o != *p) o++;
return p - o;
}
int main()
{
int i, j, k, len, count[26] = {0};
char str[8000];
scanf("%d", &len);
scanf("%s", str);
for (i = 0; i < len; i++)
count[str[i]-'a']++;
int odd = 0;
for (i = 0; i < 26; i++)
if (count[i] % 2 == 1)
odd++;
if (odd <= 1)
{
int change = 0;
for (i = 0; i < len / 2; i++)
{
if (count[str[i]-'a'] == 1)
break;
count[str[i]-'a'] -= 2;
k = find(str + i, str + len - i);
for (j = i + k; j < len - i - 1; j++)
{
swap(str + j, str + j + 1);
change++;
}
}
if (i != len / 2)
{
for (i = len - i - 1; i > len / 2; i--)
{
k = rfind(str + i, str + len - i - 1);
for (j = i - k; j > len - i - 1; j--)
{
swap(str + j, str + j - 1);
change++;
}
}
}
printf("%d", change);
}
else
{
printf("Impossible");
}
return 0;
}
😜芯片测试
问题描述
有n(2≤n≤20)块芯片,有好有坏,已知好芯片比坏芯片多。
每个芯片都能用来测试其他芯片。用好芯片测试其他芯片时,能正确给出被测试芯片是好还是坏。而用坏芯片测试其他芯片时,会随机给出好或是坏的测试结果(即此结果与被测试芯片实际的好坏无关)。
给出所有芯片的测试结果,问哪些芯片是好芯片。
输入格式
输入数据第一行为一个整数n,表示芯片个数。
第二行到第n+1行为n*n的一张表,每行n个数据。表中的每个数据为0或1,在这n行中的第i行第j列(1≤i, j≤n)的数据表示用第i块芯片测试第j块芯片时得到的测试结果,1表示好,0表示坏,i=j时一律为1(并不表示该芯片对本身的测试结果。芯片不能对本身进行测试)。
输出格式
按从小到大的顺序输出所有好芯片的编号
样例输入
3
1 0 1
0 1 0
1 0 1
样例输出
1 3
#include <stdio.h>
int main()
{
int i, j, k, l, n, a[20][20], b[20] = {0}, c[20] = {0};
scanf("%d", &n);
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
scanf("%d", &a[i][j]);
l = 1;
for (i = 0; i < n; i++)
{
if (b[i] != 0)
continue;
b[i] = l++;
for (j = i + 1; j < n; j++)
{
if (b[j] != 0)
continue;
for (k = 0; k < n; k++)
if (a[i][k] != a[j][k])
break;
if (k == n)
b[j] = b[i];
}
}
int max = 0;
for (i = 0; i < n; i++)
c[b[i]]++;
for (i = 0; i < l; i++)
if (c[max] < c[i])
max = i;
for (i = 0; i < n; i++)
if (max == b[i])
printf("%d ", i + 1);
return 0;
}
😜序列求和
问题描述
求1+2+3+…+n的值。
输入格式
输入包括一个整数n。
输出格式
输出一行,包括一个整数,表示1+2+3+…+n的值。
样例输入
4
样例输出
10
样例输入
100
样例输出
5050
数据规模与约定
1 <= n <= 1,000,000,000。
#include <stdio.h>
int main()
{
long long n, sum;
scanf("%I64d", &n);
sum = (n + 1) * n / 2;
printf("%I64d", sum);
return 0;
}
😜杨辉三角形
问题描述
杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。
它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。
下面给出了杨辉三角形的前4行:
1
1 1
1 2 1
1 3 3 1
给出n,输出它的前n行。
输入格式
输入包含一个数n。
输出格式
输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格。
样例输入
4
样例输出
1
1 1
1 2 1
1 3 3 1
数据规模与约定
1 <= n <= 34。
#include <stdio.h>
int main()
{
int i, j, n, a[34][34];
scanf("%d", &n);
for (i = 0; i < n; i++)
{
a[i][0] = 1;
a[i][i] = 1;
for (j = 1; j < i; j++)
a[i][j] = a[i-1][j-1] + a[i-1][j];
}
for (i = 0; i < n; i++)
{
for (j = 0; j <= i; j++)
printf("%d ", a[i][j]);
printf("\n");
}
return 0;
}
👉其他
📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。
温馨提示:点击下方卡片获取更多意想不到的资源。