朋友专升本出了两个C语言的题目,希望大家帮助解决。

zeusguitar 2005-05-19 11:08:30
朋友专升本出了两个C语言的题目,不是很难,以前是程序员现在做市场了,什么都不会了,希望大家帮助。直接提供源码吧,最好是大家测试过的。
1、编写一个程序,算出从100到100000之间,各位数字之和为5的整数个数。
题目解析:所谓的各位数字之和为5的整数的意思就是像113这样的一个整数,所有位上的数 字加起来等于5 (1+1+3=5),现在就是要求同学们编写一个程序,算出从100到100000之间到底有多少个符合这样要求的整数。

2、现有一个数组 int a[10],编写一个程序,执行该程序后可从键盘读入数组,然后将数组中各元素从大到小排列,并显示结果。题目解析:比如,执行程序后,从键盘读入 5, 79, 32, 50, 80, 21, 90, 100, 41, 2这10个数字组成一个数组。当然,每次执行程序的时候可以输入不同的整数作为数组的元素。然后要求把这些元素按照从大到小排列然后输出,按上述的例子则应该输出 100,90,80,79,50,41,32,21,5,
...全文
279 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
mostideal 2005-05-19
  • 打赏
  • 举报
回复
来晚了。。顶了。。。
yesiloveyou 2005-05-19
  • 打赏
  • 举报
回复
只有顶的份了 /早上真该翘课/
flyingdancing2005 2005-05-19
  • 打赏
  • 举报
回复
不是10000,是100000
flyingdancing2005 2005-05-19
  • 打赏
  • 举报
回复
//No 1
#include<iostream>
using namespace std;
bool is_five(int number)
{
int sum=0;
while(number!=0)
{
sum+=number%10;
number/=10;
}
if(sum==5)
return true;
else
return false;

}


int main()
{
int count=0;
for(int i=100;i<10000;i++)
{
if(is_five(i))
{
count++;
cout<<count<<" :"<<i<<endl;
}
}
return 0;
}
xiao_xiao_zi 2005-05-19
  • 打赏
  • 举报
回复
第一题
#include <stdio.h>

int Is5(int num)
{
int temp = 0;
while (num)
{
temp+=num%10;
num/=10;
if (temp>5) return 0;
}
if (temp == 5)
{
return 1;
}
return 0;
}
int main()
{
int c = 0;
int i;
for (i = 100; i <= 10000; ++i)
{
if (Is5(i)) ++c;
}
printf("%d\n", c);
return 0;
}
fire314159 2005-05-19
  • 打赏
  • 举报
回复
对于题目一这种固定好数据的题。我觉得写个c(m,n)的算法更麻烦。呵呵。因题而异嘛。并不是通用的算法就是最好的。省事就行
fire314159 2005-05-19
  • 打赏
  • 举报
回复
#include<iostream.h>

void qsort(int *,int,int);
int partition(int *,int,int);


int main() {
int cnt;
int arr[10];

for(cnt=0;cnt<10;cnt++)
cin>>arr[cnt];

qsort(arr,0,9);
for(cnt=0;cnt<10;cnt++) {
cout<<arr[cnt]<<" ";
}
return 0;
}

void qsort(int *arr,int low,int high) {
int pro;
if(low<high) {
pro=partition(arr,low,high);
qsort(arr,low,pro-1);
qsort(arr,pro+1,high);
}
}

int partition(int *arr,int low,int high) {
int pro;
pro=arr[low];
while(low<high) {
while(low<high&&arr[high]<=pro)
high--;
arr[low]=arr[high];
while(low<high&&arr[low]>=pro)
low++;
arr[high]=arr[low];
}
arr[low]=pro;
return low;
}
--------
qsort排序。logn级的时间复杂度,普通情况下最快的排序了
piaozi2003 2005-05-19
  • 打赏
  • 举报
回复
题目一不用那么一个一个判断,就是一个排列组合问题

C(5+5-1,5)-C(2+5-1,5)=C(9,5)-C(6,5)=126-6=120

所以编写一个计算C(m,n)的函数,然后直接调用两次就可以了!
sutra 2005-05-19
  • 打赏
  • 举报
回复
更正:int lose[10]改为int lose[LENGTH],这个数组是存每位数字的
fire314159 2005-05-19
  • 打赏
  • 举报
回复
第二题要什么排序?qsort要不要?还是普通的插入排序?或者冒泡排序?实在太简单了。老兄,你朋友该不会忘得那么彻底吧?
sutra 2005-05-19
  • 打赏
  • 举报
回复
/*No.1*/
#define TOTAL 5
#define LENGTH 6
int lose[10] ;
int output()
{
int i ;
for( i = 0 ; i < LENGTH ; ++i )
printf( "%d", lose[i] ) ;
return printf( "\t" ) ;
}

int total( int sum, int idx ) {
int i, c = 0;
if( --idx == 0 ) return lose[idx] = TOTAL-sum, output() ;
for( i = sum ; i <= TOTAL; ++i )
lose[idx] = i-sum, c += total( i, idx ) ;
return c ;
}


/*No.2*/
void sort_insert( int *A, int N )
{
int j, P ;
int Tmp ;
for( P = 1; P < N; ++P ) {
Tmp = A[P] ;
for( j = P; j > 0 && A[j-1] < Tmp; --j )
A[j] = A[j-1] ;
A[j] = Tmp ;
}
}

#define COUNT 10
int main( )
{
int i, A[COUNT] ;
for( i = 0 ; i < COUNT ; ++i )
scanf( "%d", A+i ) ;
sort_insert( A, COUNT ) ;
for( i = 0 ; i < COUNT ; ++i )
printf( "%d\t", A[i] ) ;

return printf( "\ntotal:\t%d\n", total( 0, LENGTH ) ) ;
}

fire314159 2005-05-19
  • 打赏
  • 举报
回复
#include<iostream.h>

int main() {
int low=100,high=100000;
int cnt;
int temp;
int count=0;

while(low<=high) {
temp=0;
cnt=low;
if(cnt/100000!=0) {
temp+=cnt/100000;
cnt%=100000;
}
if(cnt/10000!=0) {
temp+=cnt/10000;
cnt%=10000;
}
if(cnt/1000!=0) {
temp+=cnt/1000;
cnt%=1000;
}
if(cnt/100!=0) {
temp+=cnt/100;
cnt%=100;
}
if(cnt/10!=0) {
temp+=cnt/10;
cnt%=10;
}
if(cnt!=0)
temp+=cnt;
if(temp==5)
count++;
low++;
}
cout<<"there are "<<count<<endl;
return 0;
}
lzwei3842 2005-05-19
  • 打赏
  • 举报
回复
顶一下了
magicknight 2005-05-19
  • 打赏
  • 举报
回复
//第二题
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#define MAXLINES 10

int get_lines(char *lines[] );
void sort(char *p[], int n );
void print_strings(char *p[], int n );

char *lines[MAXLINES];

int main(void )
{
int number_of_lines;

number_of_lines = get_lines(lines );

if (number_of_lines < 0 )
{
puts("Memory allocation erro");
exit(-1);
}

sort(lines, number_of_lines );
print_strings(lines, number_of_lines );
return 0;
}

int get_lines(char *lines[] )
{
int n = 0;
char buffer[80];
puts ("Enter one line at time; enter a blank when done." );
while ((n < MAXLINES) && (gets(buffer) != 0 ) && (buffer[0] != '\0'))
{
if ((lines[n] = (char *)malloc(strlen(buffer) + 1 )) == NULL)
return -1;
strcpy(lines[n++], buffer );
}
return n;
}

void sort(char *p[], int n )
{
int a, b;
char *tmp;

for (a = 1; a < n; a++ )
{
for (b = 0; b < n-1; b++ )
{
if (strcmp(p[b], p[b+1] ) > 0 )
{
tmp = p[b];
p[b] = p[b+1];
p[b+1] = tmp;
}
}
}
}

void print_strings(char *p[], int n )
{
int count;

for(count = 0; count < n; count++ )
printf("%s\n", p[count]);
}
zhangyu21101213 2005-05-19
  • 打赏
  • 举报
回复
这是第一题的:
int qushu(long i)
{ int n;
if(i>=10)
n=i%10+qushu(i/10);
else n=i;
return n ;
}
main()
{ long i ;
int a,b=0;
for(i=100;i<100000;i++)
{ a=qushu(i);
if (a==5)
printf("the number(%d) is %ld .", ++b,i);
}
}
hblinlin 2005-05-19
  • 打赏
  • 举报
回复
mark一下
yuanyou 2005-05-19
  • 打赏
  • 举报
回复
mark
flyingdancing2005 2005-05-19
  • 打赏
  • 举报
回复
//第二题
#include<iostream.h>
template<class Datatype>
void QuickSort(Datatype a[],int low,int high)
{
int i=low,j=high;
Datatype temp=a[low];

while(i<j)
{
while(i<j && temp>=a[j])j--;
if(i<j)
{
a[i]=a[j];
i++;
}


while(i<j && a[i]>temp)i++;
if(i<j)
{
a[j]=a[i];
j--;
}

}
a[i]=temp;

if(low<i)QuickSort(a,low,i-1);
if(i<high)QuickSort(a,j+1,high);
}

int main()
{
int a[10];
for(int i=0;i<10;i++)
{
cout<<"please input the "<<i+1<<" number: ";
cin>>a[i];
}
cout<<"排序前:"<<endl;
for( i=0;i<10;i++)
cout<<a[i]<<" ";
cout<<endl;


QuickSort(a,0,9);
cout<<"排序后:"<<endl;
for( i=0;i<10;i++)
cout<<a[i]<<" ";
cout<<endl;


return 0;
}
【程序1】 题目:有1,2,3,4个数字,能组成多少个互不相同且无重复数字的三位数都是多少 1.程序分析:可填在百位,十位,个位的数字都是1,2,3,4.组成所有的排列后再去 掉不满足条件的排列. 2.程序源代码: main() { int i,j,k; printf("\n"); for(i=1;i<5;i++) /*以下为三重循环*/ for(j=1;j<5;j++) for (k=1;k<5;k++) { if (i!=k&&i!=j&&j!=k) /*确保i,j,k三位互不相同*/ printf("%d,%d,%d\n",i,j,k); } } ============================================================== 【程序2】 题目:企业发放的奖金根据利润提成.利润(i)低于或等于10万元时,奖金可提10%;利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润i,求应发放奖金总数 1.程序分析:请利用数轴来分界,定位.注意定义时需把奖金定义成长整型. 2.程序源代码: main() { long int i; int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i); bonus1=100000*0.1;bonus2=bonus1+100000*0.75; bonus4=bonus2+200000*0.5; bonus6=bonus4+200000*0.3; bonus10=bonus6+400000*0.15; if(i<=100000) bonus=i*0.1; else if(i<=200000) bonus=bonus1+(i-100000)*0.075; else if(i<=400000) bonus=bonus2+(i-200000)*0.05; else if(i<=600000) bonus=bonus4+(i-400000)*0.03; else if(i<=1000000) bonus=bonus6+(i-600000)*0.015; else bonus=bonus10+(i-1000000)*0.01; printf("bonus=%d",bonus); }

70,021

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧