注:以下内容仅供交流,代码都是本人自己写的,还请同学们先自己编写再进行交流。
题目描述:编写程序判断任意给定nn的两维整型数组中是否有相同元素。
输入:第一行输入数组行数n(≤10),第二行随机输入nn个整数作为数组元素值。
输出:如果数组中有相同元素,则输出YES;否则,输出NO。
样例1:
输入:
3
1 2 3 4 5 6 7 8 9
输出:
NO
样例2:
输入:
3
1 1 2 3 4 5 6 7 8
输出:
YES
#include
#include
int main() {
int a[100],n,i,k;
scanf_s("%d", &n);
for ( i = 0; i < n*n; i++){
scanf_s("%d", &a[i]);
}
for ( i = 0; i < n*n; i++){
for ( k = i+1; k < n*n; k++){
if (a[i]==a[k]){
printf("YES");
exit(0);
}
}
}
printf("NO");
return 0;
}
这道题中我用了exit函数来方便结束程序,exit包含在stdlib.h中,用于结束程序exit(0)表示正常退出。
问题描述: 编写程序,将任意给定n*n的两维整型数组转置。
输入:第一行输入数组行数n(≤10),第二行随机输入n*n个整数作为数组元素值。
输出:按先行后列、从左至右的顺序输出转置后数组内的所有元素,每行n个元素,同一行内的各元素间以一个西文空格间隔;每行最后一个元素除必要的回车换行符外无其它字符。
样例1:
输入:
3
1 2 3
1 2 3
1 2 3
输出:
1 1 1
2 2 2
3 3 3
样例2:
输入:
3
1 1 1
2 2 2
3 3 3
输出:
1 2 3
1 2 3
1 2 3
#include
void input(int a[10][10],int n){
int i, j;
for ( i = 0; i < n; i++){
for ( j = 0; j < n; j++)
scanf_s("%d", &a[i][j]);
}
}
void out(int a[10][10], int n) {
int i, j;
for ( i = 0; i < n; i++){
for ( j = 0; j < n; j++){
printf("%d", a[j][i]);
if (j != n - 1) printf(" ");
}
if (i != n - 1) printf("\n");
}
}
int main() {
int n,a[10][10];
scanf_s("%d", &n);
input(a, n);
out(a, n);
return 0;
}
题目描述:编写程序,判断任意给定nn的两维整型数组是否关于主对角线对称。
输入:第一行输入数组行数n(≤10),第二行随机输入nn个整数作为数组元素值。
输出:如果数组关于主对角线对称,则输出YES;否则输出NO。
样例1:
输入:
3
1 2 3
2 1 2
3 2 1
输出:
YES
样例2:
输入:
3
0 0 1
2 1 2
3 2 1
输出:
NO
#include
#include
void input(int a[10][10], int n) {
int i, j;
for ( i = 0; i < n; i++){
for ( j = 0; j < n; j++)
scanf_s("%d", &a[i][j]);
}
}
int main() {
int i, j, a[10][10], n;
scanf_s("%d", &n);
input(a, n);
for ( i = 0; i < n; i++){
for ( j = 0; j < n; j++){
if (a[i][j]!=a[j][i]){
printf("NO");
exit(0);
}
}
}
printf("YES");
return 0;
}
这里同样用了exit函数方便结束程序。
问题描述:编写程序,将给定的字符串反序输出。
输入:一个长度不超过255的字符串,字符串中可能含有空白字符。
输出:反序输出的字符串。
样例1:
输入 A 输出 A
样例2:
输入 123 45 输出 54 321
这道题目有两种方法
方法一
用字符型数组输入后再反序输出,这里我就放代码了,这种方法还是挺简单的
方法二
#include
#include
int main(){
char a[256];
int i;
gets(a);
printf("%s",strrev(a));
return 0;
}
看起来更简单不是吗
这里用了strrev函数,将字符串逆置,在头文件stdlib.h中。
题目描述:
设整数集合 M 定义如下:
(1) 1∈M ;
(2) 若 x ∈M , 则 2x+1 ∈M , 3x+1 ∈M ;
(3) 没有别的整数属于集合 M 。
编程序按递增顺序生成并输出集合 M 的前n项
输入:一个正整数n(≤300)。
输出:按递增序列输出n个属于集合M的整数,各数间以一个西文空格间隔;最后一个数后无字符。
样例1:
输入:10
输出:1 3 4 7 9 10 13 15 19 21
样例2:
输入:1
输出:1
#include
//以下是插入函数,用于将生成的数插入序列中
int insert(int x, int* p,int *r) {
int* q;
q = p;
for (; q > r; q--){ //for循环用于检查是否有重复
if (x == *q) return 1;
}
for (; *p > x; p--) //直接将当前生成的数进行比较并插入集合中
*(p + 1) = *p;
*(p + 1) = x;
return 0;
}
//主函数
int main() {
int n,flag;
scanf_s("%d", &n);
int a[500] = { 1 };
for (int i = 0, j = 0; i < 400; j++) {
flag=insert(2 * a[j] + 1, &a[i++],a); //flag用于判断是否有重复,
//若有重复函数返回值为1,i不增加。
if (flag)i--;
flag=insert(3 * a[j] + 1, &a[i++],a);
if (flag)i--;
}
for (int i = 0; i < n; i++){
printf("%d", a[i]);
if (i != n - 1) printf(" ");
}
return 0;
}
题目中虽然要求最多用到前300项,可是生成过程中会出现后面元素生成的数比前面小的情况,所以需要生成多于300项来保证前300项正确。
这里我直接生成了400项
for (int i = 0, j = 0; i < 400; j++)
题目描述:
古代某法官要判决 n 个犯人死刑, 他有一条荒唐的逻辑, 将犯人首尾相接排成圆圈,所有计数从1开始; 然后从第 s 个人开始数, 每数到第 m 个犯人,则拉出来处决; 然后再数 m 个,数到的犯人再处决;… ; 但剩下的最后一个犯人可以赦免。编程序,给出处决顺序,并告知哪一个人活下来。
输入:三个正整数 n(≤1000),s和m,都可以使用int类型变量表示。
输出:依次输出被处决人员的编号,每个编号之间用一个西文空格间隔,最后一个编号后无字符。
样例:
输入:6 1 5
输出:5 4 6 2 3 1
#include
//以下是判断函数,用于判断计数时需要跳过的死人
int judge(int a[], int n, int pointer) {
while (a[pointer] == 0){
pointer = pointer + 1;
if (pointer > n) pointer = pointer % n;
}
return pointer;
}
//以下是输出函数,用于不断输出被杀死的人的序号
//flag标记第一个空格不输出,sum用于计数剩余人数,pointer用于指向当前的人
void out(int a[], int n, int s, int m) {
int pointer = s - 1, sum = n, flag = 1,i;
while(sum>=1){
for ( i = 0; i < m; i++){
pointer = pointer + 1;
if (pointer > n) pointer = pointer % n; //判断pointer是否超过人数n,并使其重新归1构成环
pointer = judge(a, n, pointer);
}
if (flag) flag = 0;
else printf(" ");
printf("%d", a[pointer]);
a[pointer] = 0; //人被杀死后赋值0标记死亡
sum--;
}
}
int main() {
int a[1001],n,s,m; //定义了一个数组,用数组中储存的0或1来判断人的死活
scanf_s("%d%d%d", &n, &s, &m);
int i;
for ( i = 0; i <= n; i++) a[i] = i; //为每个人赋值使其处于非0(活)状态
out(a, n, s, m);
return 0;
}
程序挺复杂的,这个题目可以去百度看一看,挺有帮助
https://baike.baidu.com/item/%E7%BA%A6%E7%91%9F%E5%A4%AB%E9%97%AE%E9%A2%98/3857719?fr=aladdin
题目描述:按常规英文输出1000以内自然数的英文读法。
输入:每个测试输入包含 1 个测试用例,给出正整数 n(0<= n <1000)
输出:输出占一行:如果 0<= n <1000, 用规定的格式输出 n,所有英文单词小写,最后一个单词后无字符;否则输出ERR。
样例:
输入:123
输出:one hundred and twenty-three
#include
#include
void judge(int n) {
if (n < 0 || n>1000) {
printf("ERR");
exit(0);
}
else if (n == 0){
printf("zero");
exit(0);
}
else if (n==1000)
{
printf("one thousand");
exit(0);
}
}
void out(int n) {
int a, b, c,flag=0;
c = n % 10;
b =( n / 10 )% 10;
a = n / 100;
switch (a){
case 0:break;
case 1:printf("one hundred"); break;
case 2:printf("two hundred"); break;
case 3:printf("three hundred"); break;
case 4:printf("four hundred"); break;
case 5:printf("five hundred"); break;
case 6:printf("six hundred"); break;
case 7:printf("seven hundred"); break;
case 8:printf("eight hundred"); break;
case 9:printf("nine hundred"); break;
}
if (a!=0&&(b != 0||c!=0)) printf(" and ");
switch (b){
case 0:break;
case 1:flag = 1; break;
case 2:printf("twenty"); break;
case 3:printf("thirty"); break;
case 4:printf("forty"); break;
case 5:printf("fifty"); break;
case 6:printf("sixty"); break;
case 7:printf("seventy"); break;
case 8:printf("eighty"); break;
case 9:printf("ninety"); break;
}
if (flag)
{
switch (c){
case 0:printf("ten"); break;
case 1:printf("eleven"); break;
case 2:printf("twelve"); break;
case 3:printf("thirteen"); break;
case 4:printf("fourteen"); break;
case 5:printf("fifteen"); break;
case 6:printf("sixteen"); break;
case 7:printf("seventeen"); break;
case 8:printf("eighteen"); break;
case 9:printf("nineteen"); break;
}
}
else {
if (b!=0&&c!=0)printf("-");
switch (c){
case 1:printf("one"); break;
case 2:printf("two"); break;
case 3:printf("three"); break;
case 4:printf("four"); break;
case 5:printf("five"); break;
case 6:printf("six"); break;
case 7:printf("seven"); break;
case 8:printf("eight"); break;
case 9:printf("nine"); break;
}
}
}
int main() {
int n;
scanf_s("%d", &n);
judge(n);
out(n);
return 0;
}
问题不大,用switch就行了,不过判断有点麻烦。