C语言题(关于数组的),求解,能做几题就做几题。。。
1.【问题描述】
从键盘输入一个正整数(无符号长整型),将该正整数中的每位数字重新排列,分别组成一个最大数和一个最小数并依次输出,两数间用空格分隔。
【输入形式】
从键盘输入一个无符号长整型整数。
【输出形式】
输出最大数和最小数,两数间用空格分隔,最小数左端的0不应输出。
【样例输入】
47091
【样例输出】
97410 1479
2.
【问题描述】
从键盘输入10个整数,输出这10个数中仅出现一次的数。如果没有这样的数,则输出:None。
【输入形式】
从键盘输入10个整数。
【输出形式】
按出现的次序,输出该10个数中仅出现一次的数。如没有这样的数,则输出:None。
【样例输入】
-12 36 72 36 87 99 87 87 -12 -35
【样例输出】
72 99 -35
【样例输入】
-12 36 72 36 87 99 72 87 -12 99
3.
【问题描述】
编程,输入10个互不相等的正整数存入一维整型数组a中,要求对这10个数作相应的处理并按示例格式依次输出下列结果:
⑴ 最大值和最小值及其所在位置下标;
⑵ 平均值(保留1位小数);
⑶ 大于并最接近平均值的数及其所在位置下标;
⑷ 小于平均值的数的个数。
⑸ 10个数按从小到大的顺序排列。
【输入形式】
从键盘输入10个互不相等的正整数存入一维整型数组a中。
【输出形式】
按样例格式依次输出以下各行:
⑴ 最大值和最小值及其所在位置下标;
⑵ 平均值(保留1位小数);
⑶ 大于并最接近平均值的数及其所在位置下标;
⑷ 小于平均值的数的个数;
⑸ 10个数按从小到大的顺序排列。
【样例输入】
50 60 70 80 90 95 85 75 65 55
【样例输出】
Maximum: a[5]=95
Minimum: a[0]=50
Average: 72.5
Closest to: a[7]=75
Less than: 5
Sort: 50 55 60 65 70 75 80 85 90 95
4.
【问题描述】编程,从键盘按行输入4行5列的二维整型数组a的各元,且各元的值都互不相等,先找到并输出数组a中值最大的元素,输出格式为:a[下标1][下标2]=该数值。然后将数组a中值最大的元素所在的行和列分别与最后一行和最后一列互相交换,再按行输出数组a的各元。
【输入形式】
【输出形式】
【样例输入】
56 78 36 4 19
44 95 72 85 67
-3 32 29 21 47
88 7 66 53 40
【样例输出】
a[1][1]=95
56 19 36 4 78
88 40 66 53 7
-3 47 29 21 32
44 67 72 85 95
6.
【问题描述】编程序,依次从键盘输入一个字符串和不大于该字符串长度的正整数n,将该字符串尾部(右边)的n个字符按原顺序移到该字符串的头部(左边),然后输出处理后的该字符串。
【输入形式】
【输出形式】
【样例输入】
shjFfdui#$ AG&fjk*28(ruiXK@
10
【样例输出
*28(ruiXK@shjFfdui#$ AG&fjk
[解决办法]
第一道 菜鸟 写得比较繁琐
- C/C++ code
#include <stdio.h>void main (){ unsigned long a; int b[20]={0}; int i=0,j,k,t; scanf("%d",&a); while (a) { b[i]=a%10; a/=10; i++; } printf("\n"); for(j=0;j<i;j++) for (k=0;k<i;k++) if (b[k]<b[j]) { t=b[j]; b[j]=b[k]; b[k]=t; } for (j=0;j<i;j++) { printf("%d",b[j]); } printf(" "); for (j=i-1;j>=0;j--) { if (b[j]==0)continue; printf("%d",b[j]); } printf("\n");}
[解决办法]
- C/C++ code
/*1.【问题描述】从键盘输入一个正整数(无符号长整型),将该正整数中的每位数字重新排列,分别组成一个最大数和一个最小数并依次输出,两数间用空格分隔。【输入形式】从键盘输入一个无符号长整型整数。【输出形式】输出最大数和最小数,两数间用空格分隔,最小数左端的0不应输出。【样例输入】47091【样例输出】97410 1479*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#define true 1#define false 0typedef unsigned int bool;typedef unsigned long ulong;//用最简单的冒泡排序,由小到大排序void sort(int *datas,int len){ int i,j,temp; bool change = true; for(i = len -1; i>0 && change; --i) { change = false; for(j = 0;j<i; ++j) { if(datas[j] >datas [j+1]) { temp = datas[j]; datas[j] = datas[j+1]; datas[j+1] = temp; change = true; } } }}int main(){ ulong data; ulong max = 0,min = 0; int *datas = NULL; char chs[10]; int i,len; printf("输入一个无符号长整型数: "); scanf("%ul",&data); _ultoa(data,chs,10); //将ulong型转化为字符串 len = strlen(chs); datas = (int*)malloc(sizeof(int) * len); //动态分配内存 for(i = 0;chs[i] != '\0';++i) datas[i] = chs[i] - 48; //将字符转化为数字 存到int型数组中 //对数字内部数字进行排序 sort(datas,len); for(i = 0;i<len;++i) min += (datas[i] * (int)pow(10,len-1-i));//min=1479l l表示是long型 for(i=len -1; i>=0;--i) max += (datas[i] * (int)pow(10,i)); //max = 97410l printf("max = %ul \n min= %ul\n",max,min); system("pause"); return 0;}
[解决办法]
#include<stdio.h>
void main()
{
int i, a[10],j, n,x, count=0;
for(i=0; i<10; i++)
scanf("%d",&a[i]);
for(i=0; i<10; i++)
{ x=0;
n=a[i];
for(j=0; j<10; j++)
if(n==a[j])
x++;
if(x==2)
{
count++;
}
}
if(count!=0)
printf("%d.\n",count/2);
else
printf("None\n");
getch();
}
这是第二题,楼主应该自己敲,程序不对了再来问,这样才哟提高, 谢谢
[解决办法]
- C/C++ code
/*2. 【问题描述】从键盘输入10个整数,输出这10个数中仅出现一次的数。如果没有这样的数,则输出:None。【输入形式】从键盘输入10个整数。【输出形式】按出现的次序,输出该10个数中仅出现一次的数。如没有这样的数,则输出:None。【样例输入】-12 36 72 36 87 99 87 87 -12 -35【样例输出】72 99 -35*/#include <stdio.h>#include <stdlib.h>int main(){ int i,j; int in = 0; int count =0; int *digits = (int*)malloc(sizeof(int) * 10); int *times = (int*)malloc(sizeof(int) * 10); int *once = (int*)malloc(sizeof(int) * 10); if(!digits || !once || !times) { printf("内存分配错误!"); exit(1); } printf("输入10个整数\n"); for(i = 0; i<10;++i) scanf("%d",digits+i); //将第一个数字赋给once once[0] = digits[0]; count++; //提取出所有不重复的元素 for(i = 1;i < 10;++i) { in =0; //假设初始时候不在 for(j = 0;j<count;++j) if(digits[i] == once[j]) { in = 1; //该数字在once中 break; } if(!in) once[count++] = digits[i]; } //将出现的次数初始化为0 for(i = 0; i<10;++i) times[i] = 0; //记录每个数字出现的次数 for(i = 0;i<count;++i) for(j= 0;j<10;++j) if(once[i] == digits[j]) times[i]++; //输出次数为1的数字 for(i=1;i<count;++i) if(times[i] == 1) printf("%d ",once[i]); printf("\n"); free(digits); free(once); free(times); return 0;}
[解决办法]
- C/C++ code
//1.【问题描述】////从键盘输入一个正整数(无符号长整型),将该正整数中的每位数字重新排列,分别组成一个最大数和一个最小数并依次输出,两数间////用空格分隔。//【输入形式】////从键盘输入一个无符号长整型整数。//【输出形式】////输出最大数和最小数,两数间用空格分隔,最小数左端的0不应输出。////【样例输入】////47091////【样例输出】////97410 1479#include <stdio.h>#include <string.h>#include <stdlib.h>void getNum(int *num, char *str, int n, int len, unsigned long *iMax, unsigned long *iMin){ int i; if (n == len) { unsigned long t; str[n] = '\0'; //printf("%s\n", str); t = atol(str); if (*iMax < t) *iMax = t; if (*iMin > t) *iMin = t; } for (i = 0; i < 10; i++) { if (num[i]) { str[n] = i + '0'; num[i]--; getNum(num, str, n+1, len, iMax, iMin); num[i]++; } }}int main(){ char str[20]; int num[10] = {0}, i; int len; unsigned long iMax = 0, iMin = -1000; scanf("%s", str); for (len = strlen(str), i = 0; i < len; i++) { num[str[i]-'0']++; } getNum(num, str, 0, len, &iMax, &iMin); printf("%lu %lu\n", iMax, iMin); return 0;}
[解决办法]
- C/C++ code
//2. //【问题描述】////从键盘输入10个整数,输出这10个数中仅出现一次的数。如果没有这样的数,则输出:None。//【输入形式】////从键盘输入10个整数。//【输出形式】////按出现的次序,输出该10个数中仅出现一次的数。如没有这样的数,则输出:None。////【样例输入】////-12 36 72 36 87 99 87 87 -12 -35////【样例输出】////72 99 -35//【样例输入】////-12 36 72 36 87 99 72 87 -12 99#include <stdio.h>int main(){ int i, j; int a[10], time[10] = {0}; int flag = 0; for (i = 0; i < 10; i++) { scanf("%d", &a[i]); for (j = 0; j < i; j++) { if (a[j] == a[i]) { time[j] = 1; time[i] = 1; flag = 1; break; } } } if (flag != 0) for (i = 0; i < 10; i++) { if (time[i] == 0) printf("%d ", a[i]); } else printf("None\n"); getchar(); return 0;}
[解决办法]
- C/C++ code
//3.//【问题描述】////编程,输入10个互不相等的正整数存入一维整型数组a中,要求对这10个数作相应的处理并按示例格式依次输出下列结果://⑴ 最大值和最小值及其所在位置下标;//⑵ 平均值(保留1位小数);//⑶ 大于并最接近平均值的数及其所在位置下标;//⑷ 小于平均值的数的个数。//⑸ 10个数按从小到大的顺序排列。//【输入形式】////从键盘输入10个互不相等的正整数存入一维整型数组a中。//【输出形式】////按样例格式依次输出以下各行://⑴ 最大值和最小值及其所在位置下标;//⑵ 平均值(保留1位小数);//⑶ 大于并最接近平均值的数及其所在位置下标;//⑷ 小于平均值的数的个数;//⑸ 10个数按从小到大的顺序排列。//【样例输入】////50 60 70 80 90 95 85 75 65 55////【样例输出】////Maximum: a[5]=95//Minimum: a[0]=50//Average: 72.5//Closest to: a[7]=75//Less than: 5//Sort: 50 55 60 65 70 75 80 85 90 95#include <stdio.h>void sort(int *a, int len){ int i, j, t; for (i = 0; i < len; i++) for (j = i+1; j < len; j++) { if (a[i] > a[j]) { t = a[i]; a[i] = a[j]; a[j] = t; } }}int main(){ int a[10], sum = 0; float aver, close = 1000, t = 0; int max, ax, min, in, less, cl; int i; for (i = 0; i < 10; i++) { scanf("%d", &a[i]); sum += a[i];//总和 } aver = (float)sum/10; // 平均 max = min = a[0]; ax = in = 0; for (i = 0; i < 10; i++) { if (max < a[i]) //最大 { max = a[i]; ax = i; } else if (min > a[i])//最小 { min = a[i]; in = i; } } printf("Maximum: a[%d]=%d\n", ax, a[ax]); printf("Minimum: a[%d]=%d\n", in, a[in]); printf("Average: %.1f\n", aver); // 最接近 for (i = 0; i < 10; i++) { if (a[i] > aver) { t = a[i] - aver; if (t < close) { close = t; cl = i; } } } printf("Closest to: a[%d]=%d\n", cl, a[cl]); sort(a, 10); // 排序 for (i = 0; i < 10; i++)// 小于平均值 { if (a[i] > aver) { printf("Less than: %d\n", i); break; } } printf("Sort: "); for (i = 0; i < 10; i++)// 输出 printf("%d ", a[i]); return 0;}
[解决办法]