有偿求帮忙解决问题 有答案 只要写每一行的注释就好
1、读入一个正整数 int n,计算其各位数字之和,用汉语拼音写出和的每一位数字。要求:例如输入123456789,输出si wu。
#include<stdio.h>
#include <string.h>
int main()
{
char ch[100]; //read input number as char type
int a[5]; //pinyin
int n=0; // sum
char pinyin[][9]={"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
int i; //count length of input number
int t=0; //count length of sum
gets(ch);
for(i=0;i<strlen(ch);i++)
{
n=n+ch[i]-48; //number as char start from 48 in ASCII
}
while(n!=0)
{
a[t]=n%10;
n=n/10;
t++;
}
printf("%s", pinyin[a[t-1]]); //first pinyin
for(i=t-2;i>=0;i--)
{
printf(" %s", pinyin[a[i]]);
}
return 0;
}
2、 给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
要求:例如输入Hello World Here I Come 输出:Come I Here World Hello
#include<stdio.h>
#include<string.h>
int main(void)
{
char a[100][100],c;
int length=80,i=0;
while((c=getchar())!='\n')
{
if(c==' ')
{
a[length][i]='\0'; //这一步很重要,防止 字符数组 输出过界
length--;
i=0;
continue;
}
else
{
a[length][i]=c;
i++;
}
}
a[length][i]='\0';
for(i=length;i<81;i++)
{
if(i==80)
{
printf("%s",a[80]);
break;
}
else printf("%s ",a[i]);
}
return 0;
}
3、编写程序,给定一个整数i,请求出另一个整数j,使i和j在用8位二进制表示时互为逆序。例如:给定i=3时,应得到j=192(3的二进制为:00000011,192的二进制为11000000)。
提示:
(1)十进制整数转换为二进制整数用“除2求余”法。
(2)二进制整数转换为十进制整数用“按权相加”法。
#include<stdio.h>
#include<math.h>
int main()
{
int i,s[8],m;
int j=0;
printf("请输入一个整数i:");
scanf("%d",&m);
for(i=0;i<8;i++) //用for循环求m的2进制表示并存放到s[i]中
{
s[i]=m%2;
m=m/2;
}
for(i=0;i<8;i++)
if(s[i]==1)
j+=pow(2,7-i); //pow(x,y)表示x的y次方 j=j+pow(2,7-i),
printf("j=%d",j);//7-i是把s[i]逆向排序,如11010000变为00001011
return 0;
}
4、编写程序,抓交通肇事犯。
一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没有记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是位数学家,他说:四位的车号刚好是一个整数的平方。根据以上线索求出车号。
提示:
① 按照题目的要求,造出一个前两位数相同、后两位数相同且相互间又不同的整数,然后判断该整数是否是另一个整数的平方。
② 用穷举法解此题。穷举法是最简单、最常见的一种程序设计方法,它充分利用了计算机处理的高速特征。穷举法的关键是要确定穷举的范围,既不能过分扩大穷举的范围,也不能过分缩小穷举的范围,否则程序的运行效率会很低,或有可能遗漏正确的结果而产生错误。
#include <stdio.h>
#include <math.h>
int main()
{
int i,j,k,c;
for (i=1;i<=9;i++)
for (j=0;j<=9;j++)
if (i!=j)
{
k=1100*i+11*j;
for (c=31;c<100;c++)
if (c*c==k)
printf ("车牌号是 %d.\n", k);
}
return 0;
}
5、请编写程序,找出一段给定文字中出现最频繁的那个英文字母。
要求:在一行中输出出现频率最高的那个英文字母及其出现次数,其间以空格分隔。如果有并列,则输出按字母序最小的那个字母。统计时不区分大小写,输出小写字母。
例如输入:This is a simple TEST. There ARE numbers and other symbols 1&2&3
输出:e 7
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;
char c; //用来存放出现次数最多的字符
int num[26]={0},max=0; //用来统计26个英文字母出现的次数 max为出现次数最多
getline(cin,s); //用getline输入可以将空格等也输入进去
for(int i=0;i<s.length();i++){ //统计
if(s[i]>='a'&&s[i]<='z')
num[s[i]-'a']++;
if(s[i]>='A'&&s[i]<='Z')
num[s[i]-'A']++;
}
for(int i=0;i<26;i++){ //遍历查找最大
if(num[i]>max){
max = num[i];
c = i+'a';
}
}
cout<<c<<" "<<max;
return 0;
}