4-2-7 找完数
所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。
输入格式:
输入在一行中给出2个正整数m和n(1<m≤n≤10000),中间以空格分隔。
输出格式:
逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + ... + 因子k”,其中完数和因子均按递增顺序给出。若区间内没有完数,则输出“None”。
输入样例:
2 30
输出样例:
6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14
代码:
#include<stdio.h>
int main()
{
int m,n,i,sum=1,j,arr[1000],k,h=0,count=0;
scanf("%d %d",&m,&n);
for(i=m;i<=n;i++,sum=1,h=0)
{
for(j=2;j<i;j++)
{
if(i%j==0)
{
sum+=j;
arr[h++]=j;
}
}
if(sum==i)
{
printf("%d = 1",i);
count++;
for(k=0;k<h;k++)
printf(" + %d",arr[k]);
printf("\n");
}
}
if(count==0)
printf("None");
return 0;
}
6-2 英文字母替换加密(大小写转换+后移1位)
本题要求编写程序,将英文字母替换加密。为了防止信息被别人轻易窃取,需要把电码明文通过加密方式变换成为密文。变换规则是:将明文中的所有英文字母替换为字母表中的后一个字母,同时将小写字母转换为大写字母,大写字母转换为小写字母。例如,字母a->B、b->C、…、z->A、A->b、B->c、…、Z->a。输入一行字符,将其中的英文字母按照以上规则转换后输出,其他字符按原样输出。
输入格式:
输入一行字符,以回车符 '\n'作为 结束符。
输出格式:
将输入的一行字符中的所有英文字母替换为字母表中的后一个字母,同时将小写字母转换为大写字母,大写字母转换为小写字母后输出,其他字符按原样输出。
输入样例:
在这里给出一组输入。例如:
Reold Z123?
输出样例:
在这里给出相应的输出。例如:
sFPME a123?
代码:
#include<stdio.h>
int main()
{
char a[100];
gets(a);
int i;
for(i=0;a[i]!='\0';i++)
{
if(a[i]>='a'&&a[i]<='z')
a[i]=(a[i]+1-'a')%26+'A';
else if(a[i]>='A'&&a[i]<='Z')
a[i]=(a[i]+1-'A')%26+'a';
}
puts(a);
return 0;
}
6-5 简单计算器
模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。
输入格式:
输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。
输出格式:
在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。
输入样例:
1+2*10-10/2=
输出样例:
10
代码:
#include<stdio.h>
int main()
{
int b,a,error=0;
char ch;
scanf("%d",&a);
while((ch=getchar())!='=')
{
scanf("%d",&b);
switch(ch)
{
case '+':
a=a+b;
break;
case '-':
a=a-b;
break;
case '*':
a=a*b;
break;
case '/':
if(b==0)
{
printf("ERROR");;
error=1;
break;
}
else
{
a=a/b;
break;
}
default:
printf("ERROR");
error=1;
break;
}
}
if(error==0)
printf("%d",a);
return 0;
}
7-1-1 简化的插入排序
本题要求编写程序,将一个给定的整数插到原本有序的整数序列中,使结果序列仍然有序。
输入格式:
输入在第一行先给出非负整数N(<10);第二行给出N个从小到大排好顺序的整数;第三行给出一个整数X。
输出格式:
在一行内输出将X插入后仍然从小到大有序的整数序列,每个数字后面有一个空格。
输入样例:
5
1 2 4 5 7
3
输出样例:
1 2 3 4 5 7
法一:
#include<stdio.h>
int main()
{
int n, x, i, j,flag=0;
scanf("%d", &n);
int arr[n + 1];
for (i = 0; i < n; i++)
scanf("%d", &arr[i]);
scanf("%d", &x);
for (i = 0; i <= n; i++)
{
if (arr[i] > x)
{
for (j = n; j > i; j--)
{
arr[j] = arr[j - 1];
}
arr[i] = x;
flag=1;
break;
}
}
if (flag==0)
arr[n] = x;
for (i = 0; i <= n; i++)
printf("%d ", arr[i]);
return 0;
}
法二:
#include<stdio.h>
int main(void)
{
int n,x,a[10],i,t;
scanf("%d", &n);
for (i=0; i<n; i++)
scanf("%d", &a[i]);
scanf("%d", &x);
for (i=0; i<n; i++){
if (x < a[i]){
t = a[i];
a[i] = x;
x = t;
}
printf("%d ", a[i]);
}
printf("%d ",x);
return 0;
}
7-1-10 组个最小数
给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)。例如:给定两个0,两个1,三个5,一个8,我们得到的最小的数就是10015558。
现给定数字,请编写程序输出能够组成的最小的数。
输入格式:
输入在一行中给出10个非负整数,顺序表示我们拥有数字0、数字1、……数字9的个数。整数间用一个空格分隔。10个数字的总个数不超过50,且至少拥有1个非0的数字。
输出格式:
在一行中输出能够组成的最小的数。
输入样例:
2 2 0 0 0 3 0 0 1 0
输出样例:
10015558
代码:
#include<stdio.h>
int main()
{
int i,arr[10],k=1;
for(i=0;i<10;i++)
{
scanf("%d",&arr[i]);
}
for(i=1;i<10;i++)
{
if(arr[i]!=0)
{
printf("%d",i);
arr[i]--;
break;
}
}
for(i=0;i<10;i++)
{
while(arr[i]!=0)
{
printf("%d",i);
arr[i]--;
}
}
return 0;
}